Another check-in of major work on the RCIO co-processor. Turns-out the firmware it’s running emulates a PX4IO/Pixhawk co-processor (makes sense, considering APM is the main target). So I have implemented a complete (so far as I am aware) PX4IO protocol and it works! The other hurdle which was solved is access to the second SPI bus from Windows ioT. Basically it works from C++ not .NET.
The Linux RCIO driver was used as a model for the protocol and cross-checked against the official PX4IO firmware repository. Basically it operates on a concept of register/data “pages” which are already split-up into logical groups like setup, configuration, controls, sensors, etc… Here you can see the results in the debugger:
Some work still needs to be done on converting some of the values but they appear to be correct. So I can go ahead and get RC input working with hardware support on the Navio 2. Good news for Navio 1 and Plus owners too is that Microsoft came back again about the GPIO buffering and promised it will be supported in the next SDK release. So lots happening here now.
Along the firmware sides, I’m also implementing the ARM SWD (Serial Wire Debug) protocol so we can fully interact/support/configure/upgrade this co-processor. I’ve started adding an “RCIO Terminal” tool to the soluton for this purpose:
On the language side there was also a “journey”. As it turned out the C++/CX has a successor, C++/WinRT that is highly recommended (and will replace) it as the standard WinRT C++ integration “framework” (it’s actually just header “transformations” which makes it even better, like pure C++ than a heavy/slower wrapper). That’s good but not complete by MS yet so we have a mix of C++/CX for the external interface but can still use the (much) higher performance C++/WinRT code for the internal stuff.
Next steps, finish the RCIO implementation and continue conversion to C++. Right now it only works with Visual Studio 2017 RC and the WDK is not out for that yet so the drivers are not important at this time, they will follow later at lower priority. The C++ framework will perform adequately for the first version.