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