windows/bluetooth: Add support for nimble BLE to windows port. #7781
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This was developed in conjunction with #7780 to provide support for nimble BLE on windows to the unix port.
This allows a usb/serial HCI controller to be used on windows to test and run bluetooth micropython code.
This has only been added to minwg / make based builds at this stage. The MSVC project has not been updated to match.
I suspect nimble builds may not be possible with MSVC due to a struct size issue that took quite a long time to debug.
Nimble uses struct size to test whether the correct HCI packet has been received, eg.
On linux/unix/arm builds
sizeof(struct ble_hci_ev_command_complete) == 4
as theuint8_t return_params[0];
is essentially ignored.On MSVC apparently this null array is apparently included as size 1, eg.
sizeof(struct ble_hci_ev_command_complete) == 5
- and by default mingw matches MSVC behavior on this. This was causing the code above toreturn BLE_HS_ECONTROLLER
error instead of correctly processing the hci packet.I had to add the compiler flag
-mno-ms-bitfields
to make mingw match "regular" gcc behavior - I don't know if a similar compile flag exists to make MSVC match gcc packed struct size - let alone whether the rest of the nimble codebase is at all compilable under msvc.