xref: /btstack/port/windows-h4-zephyr/README.md (revision 9085f7a510af90fcaaa656553bf07535560fa004)
134fd36daSMatthias Ringwald# BTstack Port for Windows Systems with Zephyr-based Controller
2a1a85659SMatthias Ringwald
398918ebdSMatthias RingwaldThe main difference to the regular windows-h4 port is that that the Zephyr Contoller uses 1000000 as baud rate.
4a1a85659SMatthias RingwaldIn addition, the port defaults to use the fixed static address stored during production.
5a1a85659SMatthias Ringwald
698918ebdSMatthias RingwaldThe port provides both a regular Makefile as well as a CMake build file. It uses native Win32 APIs for file access and does not require the Cygwin or mingw64 build/runtine. All examples can also be build with Visual Studio 2022 (e.g. Community Edition).
798918ebdSMatthias Ringwald
8a1a85659SMatthias Ringwald## Prepare Zephyr Controller
9a1a85659SMatthias Ringwald
10a1a85659SMatthias RingwaldPlease follow [this](https://devzone.nordicsemi.com/blogs/1059/nrf5x-support-within-the-zephyr-project-rtos/) blog post about how to compile and flash `samples/bluetooth/hci_uart` to a connected nRF5 dev kit.
11a1a85659SMatthias Ringwald
12a1a85659SMatthias RingwaldIn short: you need to install an arm-none-eabi gcc toolchain and the nRF5x Command Line Tools incl. the J-Link drivers, checkout the Zephyr project, and flash an example project onto the chipset:
13a1a85659SMatthias Ringwald
14a1a85659SMatthias Ringwald  * Install [J-Link Software and documentation pack](https://www.segger.com/jlink-software.html).
15a1a85659SMatthias Ringwald  * Get nrfjprog as part of the [nRFx-Command-Line-Tools](http://www.nordicsemi.com/eng/Products/Bluetooth-low-energy/nRF52-DK). Click on Downloads tab on the top and look for your OS.
16a1a85659SMatthias Ringwald  * [Checkout Zephyr and install toolchain](https://www.zephyrproject.org/doc/getting_started/getting_started.html). We recommend using the [arm-non-eabi gcc binaries](https://launchpad.net/gcc-arm-embedded) instead of compiling it yourself. At least on OS X, this failed for us.
17a1a85659SMatthias Ringwald
18a1a85659SMatthias Ringwald  * In *samples/bluetooth/hci_uart*, compile the firmware for nRF52 Dev Kit
19a1a85659SMatthias Ringwald
20a1a85659SMatthias Ringwald      $ make BOARD=nrf52_pca10040
21a1a85659SMatthias Ringwald
22a1a85659SMatthias Ringwald   * Upload the firmware
23a1a85659SMatthias Ringwald
24a1a85659SMatthias Ringwald      $ make flash
25a1a85659SMatthias Ringwald
26a1a85659SMatthias Ringwald   * For the nRF51 Dev Kit, use `make BOARD=nrf51_pca10028`.
27a1a85659SMatthias Ringwald
28a1a85659SMatthias Ringwald## Configure serial port
29a1a85659SMatthias Ringwald
30a1a85659SMatthias RingwaldTo set the serial port of your Zephyr Controller, you can either update config.device_name in main.c or
31b5674ee2SMatthias Ringwaldalways start the examples with the correct `-u COMx` option.
32b5674ee2SMatthias Ringwald
3398918ebdSMatthias Ringwald## Visual Studio 2022
34b5674ee2SMatthias Ringwald
3598918ebdSMatthias RingwaldVisual Studio can directly open the provided `port/windows-windows-h4-zephyr/CMakeLists.txt` and allows to compile and run all examples.
36b5674ee2SMatthias Ringwald
3798918ebdSMatthias Ringwald## mingw64
3898918ebdSMatthias Ringwald
3998918ebdSMatthias RingwaldIt can also be compiles with a regular Unix-style toolchain like [mingw-w64](https://www.mingw-w64.org).
4098918ebdSMatthias Ringwaldmingw64-w64 is based on [MinGW](https://en.wikipedia.org/wiki/MinGW), which '...provides a complete Open Source programming tool set which is suitable for the development of native MS-Windows applications, and which do not depend on any 3rd-party C-Runtime DLLs.'
41b5674ee2SMatthias Ringwald
42b5674ee2SMatthias RingwaldIn the MSYS2 shell, you can install everything with pacman:
43b5674ee2SMatthias Ringwald
44b5674ee2SMatthias Ringwald    $ pacman -S git
45*9085f7a5SMatthias Ringwald    $ pacman -S cmake
46b5674ee2SMatthias Ringwald    $ pacman -S make
47b5674ee2SMatthias Ringwald    $ pacman -S mingw-w64-x86_64-toolchain
48*9085f7a5SMatthias Ringwald    $ pacman -S mingw-w64-x86_64-portaudio
49b5674ee2SMatthias Ringwald    $ pacman -S python
50b5674ee2SMatthias Ringwald    $ pacman -S winpty
51a1a85659SMatthias Ringwald
52*9085f7a5SMatthias Ringwald### Compilation with CMake
53a1a85659SMatthias Ringwald
54*9085f7a5SMatthias RingwaldWith mingw64-w64 installed, just go to the port/windows-h4 directory and use CMake as usual
5598918ebdSMatthias Ringwald
56*9085f7a5SMatthias Ringwald    $ cd port/windows-h4
57*9085f7a5SMatthias Ringwald    $ mkdir build
58*9085f7a5SMatthias Ringwald    $ cd build
59*9085f7a5SMatthias Ringwald    $ cmake ..
60a1a85659SMatthias Ringwald    $ make
61a1a85659SMatthias Ringwald
620af1bfd9SMatthias RingwaldNote: When compiling with msys2-32 bit and/or the 32-bit toolchain, compilation fails
630af1bfd9SMatthias Ringwaldas `conio.h` seems to be mission. Please use msys2-64 bit with the 64-bit toolchain for now.
640af1bfd9SMatthias Ringwald
6598918ebdSMatthias Ringwald## Console Output
66a1a85659SMatthias Ringwald
6798918ebdSMatthias RingwaldWhen running the examples in the MSYS2 shell, the console input (via btstack_stdin_support) doesn't work. It works in the older MSYS and also the regular CMD.exe environment. Another option is to install WinPTY and then start the example via WinPTY like this:
68a1a85659SMatthias Ringwald
6998918ebdSMatthias Ringwald    $ winpty ./gatt_counter.exe
70a1a85659SMatthias Ringwald
7198918ebdSMatthias RingwaldThe packet log will be written to hci_dump.pklg
72