This is a minor release of the SDK with many bug fixes and documentation improvements, along with some new features.
Highlights are listed below, or you can see the full list of individual commits here, and the full list of resolved issues here.
Board support
The following board configurations have been added and can be specified using PICO_BOARD:
debug_probenologo_rp2350_usbraspberry_pi_pi500_rp2040soldered_nula_ethernet_w55rp20soldered_nula_max_rp2350vcc-gnd_yd-rp2040_4mvcc-gnd_yd-rp2040_8mvcc-gnd_yd-rp2040_16mwaveshare_rp2350_pizeroweact_studio_rp2350a_core_v10_4mbweact_studio_rp2350a_core_v10_16mb
The following board configurations have been modified to define constants for their included PSRAM:
adafruit_feather_rp2350adafruit_fruit_jamdefcon32_badgeeetree_gamekit_rp2040pimoroni_pga2350pimoroni_pico_plus2_rp2350pimoroni_pico_plus2_w_rp2350pololu_3pi_2040_robotpololu_zumo_2040_robotsparkfun_iotnode_lorawan_rp2350sparkfun_iotredboard_rp2350sparkfun_promicro_rp2350sparkfun_thingplus_rp2350- (Additionally PICO_SD_DAT3_PIN corrected to 9)sparkfun_xrp_controllerwaveshare_pico_cam_aweact_studio_rp2350b_core
The following other board configuration has been modified:
seeed_xiao_rp2350- Flash size corrected from 4 MB to 2 MB
New Features
XIP Cache as SRAM (RP2350)
RP2350's XIP cache can now be used as additional SRAM via pico_use_xip_cache_as_ram() in CMakeLists.txt. This adds the __in_xip_ram attribute for placing data or code in XIP SRAM. Additionally, the pico_set_time_critical_placement() and pico_set_not_in_flash_placement() CMake functions can be used to place code there. For more information, see Linker script modularisation, below.
Linker script modularisation
The SDK linker scripts have been significantly refactored into modular .incl include files, making custom linker configurations much simpler:
- Scripts are now decomposed into
section_*.incl/sections_*.inclfiles that can be selectively overridden bypico_add_linker_script_override_path(). pico_set_linker_script_var()allows setting linker script variables from CMake (for example, heap location), including referencing default memory addresses.pico_set_time_critical_placement()/pico_set_not_in_flash_placement()redirect__time_critical_func/__not_in_flashsections (for example, to XIP cache or scratch X/Y).- Linker script files are now tracked as build dependencies, so changes trigger re-links.
- Breaking change for Bazel builds using non-default binary types:
PICO_DEFAULT_LINKER_SCRIPTtargets have moved from//src/rp2_common/pico_crt0to//src/rp2_common/pico_standard_link.
New libraries
hardware_psram
A new hardware_psram library initialises and manages PSRAM on RP2350 boards. It runs automatically at startup when linked, using flash device-info from OTP or the PICO_PSRAM_CS_PIN / PICO_PSRAM_SIZE_BYTES board constants (or their auto-detect variants). It also provides:
psram_check_address()to validate whether an address lies in available PSRAM.psram_or_malloc()/psram_or_free()for static PSRAM allocation with amallocfallback if the detected PSRAM size is too small.
For more information, see the hardware_psram documentation.
pico_low_power
This library provides helper methods for entering, and resuming from, low power modes.
These include Sleep, Dormant, and, on RP2350, Pstate for the various configurable power states.
- Added
low_power_set_pins_low_leakage_exclude_mask(exclude_mask)/low_power_set_pins_low_leakage_exclude_mask64(exclude_mask)— configures all GPIO pins in the given mask to a low-leakage input state, reducing current draw whilst dormant. - The easiest way to enter these low-power modes for 10 seconds is to use
low_power_sleep_for_ms(10000, NULL, true),low_power_dormant_for_ms(10000, DORMANT_CLOCK_SOURCE_DEFAULT, NULL), orlow_power_pstate_for_ms(10000, NULL, NULL). For information about the functions to use for waking based on GPIO pin state changes, and other arguments you can pass to the APIs, see the documentation. - Provides
__persistent_data()macro to make variables persist acrossPstatechanges, and thepico_set_persistent_data_loc()CMake function to place that data in specific areas of SRAM (for example,xip_ramfor the lowest power consumption).
For more information, see the pico_low_power documentation.
pico_thread_local
This library provides runtime support for thread local variables __thread in C and thread_local in C++, and is included by default in applications as part of the pico_runtime runtime support library.
- Provides consistent thread local support across:
- All GCC and LLVM/Clang versions
- Arm/RISC-V
- Newlib and Picolibc
- Attempts to minimise runtime overhead when not used.
- Provides three types of TLS support:
per_thread(default) - proper per core (and potentially RTOS task) values for__thread/thread_localvariablesglobal-__thread/thread_localis supported but only a single shared value is used. This was usually the behaviour on priorpico-sdkversions.none- programs using__thread/thread_localmight fail to link and runtime results are undefined. However, this always produces the smallest binary if you're known not to be using thread local variables.
- Provides FreeRTOS support. You can enable FreeRTOS support with
per_threadmode by definingconfigUSE_PICOLIBC_TLS=1in your FreeRTOS configuration becasuepico_thread_localprovides Picolibc-style TLS support functionstls_size()and_init_tls()inper_threadmode, even when Picolibc isn't being used.
For more information, see the pico_thread_local documentation.
pico_usb_reset
USB reset-interface support has been extracted from pico_stdio_usb into a separate pico_usb_reset library, allowing its use with custom USB descriptors independently of stdio. For the instructions on how to use it depending on how your project uses TinyUSB, see the documentation for this library.
- All of the old defines have been renamed to remove
STDIO, with backwards compatible aliases kept in place. For example,PICO_STDIO_USB_ENABLE_RESET_VIA_VENDOR_INTERFACEhas been renamed toPICO_ENABLE_USB_RESET_VIA_VENDOR_INTERFACE.
For more information, see the pico_usb_reset documentation.
Notable library changes and improvements
hardware_alarm
- Fixed alarm pending flag not being cleared when an alarm was cancelled, which could cause spurious alarm callbacks.
hardware_clocks
- Added
clock_configure_mhz(), similar toclock_configure(), but only accepting frequencies in integer numbers of MHz. This new method might be preferable when code size is paramount because it doesn't pull in library code for 64-bit division.
hardware_divider
- Fixed
divmod_s32s32_unsafe()anddivmod_u32u32_unsafe()on RP2040, which crashed before if (PICO_DIVIDER_DISABLE_INTERRUPTS=0).
hardware_exception
- Fixed RISC-V exception handling;
exception_is_compile_time_defaultwas always returning false, causingexception_set_exclusive_handlerto assert.
hardware_flash
- Added
PICO_ALWAYS_INCLUDE_FLASH_ID_FUNCTIONSpreprocessor define (defaults to0), which can be set to1to includeflash_get_unique_id()even in "no_flash" binaries. This might be useful if your binary is designed to load and run from RAM, but is still expected to run on a chip with flash, and is particularly useful when using Bluetooth and Wi-Fi because the flash unique ID is used by default to generate the MAC address.
hardware_gpio
- Added
gpio_init_mask64(). - Improved the efficiency of various
gpio_...mask()andgpio_...mask64()functions. - Fixed race condition in
gpio_set_irq_enabled_with_callback().
hardware_irq
- Change the default maximum number of shared IRQ handlers (
PICO_MAX_SHARED_IRQ_HANDLERS) from 4 to 6 when usingpico_stdio_usbbecause its implementation consumes 2 shared IRQ handlers.
hardware_pio
- Added
pio_set_input_sync_bypass_with_mask()andpio_set_input_sync_bypass_with_mask64()to enable/disable the input synchronizer bypass for multiple PIO pins - Added
pio_encode_wait_jmppin(), which was missing. - Fixed
pio_encode_mov(pio_exec). - Fixed some incorrect range-checking assertions.
- Fixed possible resource leak in unsuccessful
pio_claim_free_sm_and_add_program_for_gpio_range(). - The
pio_sm_restart()documentation was significantly clarified.
hardware_powman
- Fixed incorrect bit mask in
powman_set_debug_power_request_ignored(). powman_timer_set_1khz_tick_source_lposc()now calls the weakpowman_timer_get_lposc_calib_freq()function to get the LPOSC frequency; by default, this function reads the frequency from OTP whenPICO_POWMAN_CALIBRATE_LPOSC_FROM_OTPis set, but it can be overridden (for example, to usefrequency_count_khz()at runtime).- Added
powman_timer_pause()function, which saves and restores the current time, and uses this inpowman_timer_set_1khz_tick_source_...functions. Previously these functions calledpowman_timer_stop(), which then restarts the timer from the original start time whenpowman_timer_start()is called. - Added
LPOSC_MIN_EXPECTED_HZ/LPOSC_MAX_EXPECTED_HZdefines for range validation inpowman_timer_get_lposc_calib_freq().
hardware_spi
- Added
spi_get_instance()for consistency with other instanced hardware APIs.
hardware_sync
- Modified predefined
PICO_SPINLOCK_ID_xxxconstants when usingPICO_USE_SW_SPIN_LOCKS=0on RP2350 to use spin lock numbers that are unaffected by RP2350-E2.
pico_async_context
- Make sure
xTimerDeletecompletes synchronously duringasync_context_freertosdeinitialisation to prevent a possible race with the timer task if it's running on the other core.
pico_bootrom
- Due to a boot ROM bug (RP2350-E30) on RP2350,
rom_reboot()with a delay of 0 milliseconds doesn't actually cause a reboot. To work around this issue, the SDK implementation now passes a delay of 1 millisecond instead. - Added preprocessor define
PICO_BOOTROM_WORKAROUND_RP2350_A2_ACTIVITY_LED_BUG(defaults to 1 on RP2350 QFN60 Arm builds where A2 is supported) to force a reboot into RISC-V USB boot if an activity LED is requested usingrom_reset_usb_boot*functions, so that the LED correctly flashes (RP2350 A2 access control has a bug which the bootrom hits in Arm mode which prevents this, see RP2350-E3)
pico_btstack
- Fixed BTstack flash bank reads on RP2350 to use
XIP_NOCACHE_NOALLOC_NOTRANSLATE_BASEinstead ofXIP_BASE, fixing bond data storage and retrieval when running from partitions. - Fixed a CMake target name collision in
pico_btstack_make_gatt_header()that prevented a single target from consuming more than one.gattfile. - Fixed
pico_btstack_make_gatt_header()invokingcompile_gatt.pyfromPICO_SDK_PATHrather thanPICO_BTSTACK_PATHwhen an out-of-tree BTstack is supplied.
pico_crt0
- Added
PICO_CRT0_DEBUG_ENTRY_RESETS_VIA_BOOTROMon RP2350 (enabled by default, with a minimal code-size cost):no_flashbinaries now reset through the boot ROM when entered from a debugger, enabling load-maps, XIP SRAM pinning, and similar initialisation to operate correctly.
pico_cyw43_driver
- BTstack HCI transport no longer uses async send callbacks; sends are now synchronous, improving reliability.
- Updated
cyw43-driver. - Added a weak
cyw43_tcpip_link_status()implementation for builds not using lwIP, so that such builds link correctly; the application is expected to supply its own implementation.
pico_float / pico_double
- Fixed crash on RP2040 when
PICO_FLOAT_IN_RAM/PICO_DOUBLE_IN_RAMwas enabled. - Fixed
float2fix,float2ufix,double2fix,double2ufix, and their variants to saturate correctly to the nearest representable integer value (for example,INT32_MAX/INT32_MIN,UINT32_MAX/0) when given out-of-range inputs such as infinity or NaN; previously, the behaviour was undefined. - Fixed RISC-V builds when
pico_float_noneis set. - Documentation updated to clarify saturation behaviour and RP2350-specific function availability.
- Added new
PICO_FLOAT_HAS_*/PICO_DOUBLE_HAS_*preprocessor defines inpico/float.handpico/double.hthat indicate which SDK-specific functions (conversions, fast variants, and so on) are available on the current build target; this is useful for writing portable code that conditionally uses SDK extensions.
pico_lwip
makefsdatascript now supports.responsesidecar files alongside content files, allowing per-file HTTP response overrides (for example, for captive portal redirects).
pico_mbedtls
- Added source file
block_cipher.cfor MbedTLS versions 3.6.0 and greater.
pico_multicore
- Added new
PICO_MULTICORE_LOCKOUT_BEFORE_CORE1_STARTEDpreprocessor define (defaults to1), which removes the requirement that core 1 be started (and lockout-victim-initialised) before entering multicore-core-lockout from core 0. This is generally useful behaviour, but consumes a little code space when usingpico_multicoreeven without the use of multicore lockout, so this option may be turned off if not needed, including throughpico_minimize_runtime. - Fixed off-by-one error breaking check of claimed doorbells on core 1 for
multicore_doorbell_claim()andmulticore_doorbell_claim_unused().
pico_platform
rp2040_rom_version()is now calledrp2350_rom_version()on RP2350.panic()withPICO_PANIC_FUNCTION=xxxnow works correctly on RISC-V.- The stack is now properly aligned when hitting a breakpoint in the default
panic(), which fixes stack trace problems when debugging.
pico_rand
- Fixed possible decreased entropy during overlapping calls to the random number generation functions.
pico_status_led
-
Fixed implementation for WS2812 LEDs to correctly set the first LED in the chain to the latest colour/state, in all cases, including when updated rapidly:
WS2812 LEDs require a "reset delay" between updates, so this fix makes sure such a delay (configured via the new
PICO_COLORED_STATUS_LED_RESET_DELAY_USdefine which defaults to 50) occurs between updates sent to the LED. If the time since the last update is less than the reset delay, an alarm is set for when a safe reset time has passed since the last update to update the LED with the then last value passed by the application, allowing the application to update as frequently as it likes, and the LED to update to the latest value as fast as it can. The use of an alarm requires the default alarm pool, and can be disabled by usingPICO_COLORED_STATUS_LED_USE_DEFAULT_ALARM_POOL=0, in which case thepico_status_ledAPI will just busy-wait if needed for a reset delay, throttling the API to the fastest the LED can apply each update.
pico_stdio
- When using
pico_set_printf_implementation(compiler)withPICO_STDIO_SHORT_CIRCUIT_CLIB_FUNCS=1,stdoutis now explicitly flushed after eachprintfcall, partially working around C library buffering issues. Consider usingPICO_STDIO_SHORT_CIRCUIT_CLIB_FUNCS=0withpico_set_printf_implementation(compiler)for the most correct output.
pico_stdio_usb
pico_stdio_usbis no longer disabled whentinyusb_hostis enabled, allowing use of STDIO over USB while using PIO USB host mode.- Fixed duplicate spin lock unclaim in
stdio_usb_deinitthat caused assertion failures in debug builds.
pico_sync
- Added
PICO_SYNC_RP2350_SPINLOCK_WORKAROUND(enabled by default on RP2350 with SW spin locks): fixes a problem on RP2350 where a spin lock/unlock causes a SEV on the executing core, thus causing a subsequent WFE to wake up immediately, preventing low power sleeps in sleeps and synchronization primitives with timeouts.
pico_time
- Fixed a busy wait / starvation scenario that might occur when using alarm timeouts (either explicitly or through synchronization primitives) from core 1 using the alarm pool on core 0. This caused both strange behaviour, and broke entering a low power state
- Low power
sleep_functions no longer busy-wait instead on RP2350 when using software spin locks.
pico_util
- Added boolean success return code to
queue_init.
Miscellaneous
- Many
-fanalyzerwarnings from GCC 15.2 fixed. Note: only the latest GCC is checked because older versions have more false positives.
C++ development
- C++ static initialization is now thread-, multicore-safe, controlled by
PICO_CXX_THREAD_SAFE_STATIC_INIT(defaults to1whenpico_multicoreis linked)
Board Configuration
- Nested board headers (using #include) are now searched for
pico_board_cmake_set()andpico_board_cmake_set_default()declarations. - Added
PICO_PSRAM_CS_PINto define a CS pin for PSRAM. - Added
PICO_PSRAM_SIZE_BYTESsimilar toPICO_FLASH_SIZE_BYTESto specify the PSRAM size. - Added boolean
PICO_AUTO_DETECT_PSRAM_SIZEto request best-effort runtime detection of PSRAM size as an alternative to settingPICO_PSRAM_SIZE_BYTES.
Host platform
- Added
pico_unique_idlibrary. - Updated
hardware_gpiolibrary with recent on-device additions.
Documentation
- Many miscellaneous improvements.
Pioasm
- Updated C SDK generated code to use
constexprrather thanconstfor C++ code - Fixed a crash when reporting some errors such as for
irq next set 0 rel. - Enhanced JSON output now includes additional program metadata: pioasm version, PIO version, used GPIO ranges, in/out/set counts,
movStatus, FIFO configuration, clock divider, code blocks, and language options. A JSON schema file is included.
BTstack
Updated from v1.6.2 to v1.8.2. Highlights across releases:
v1.7
- Chipset: support for newer AIROC controllers requiring Download Mode.
- GATT Service Client: new component for discovering characteristics and enabling notifications or indications; supports caching in TLV.
- GATT Server: stores database hash in TLV and discards stored CCCs if the database changes.
- HID Host: optional HID descriptor storage; renamed to HIDS Host (
hids_client.*→hids_host.*,MAX_NR_HIDS_CLIENTS→MAX_NR_HIDS_HOSTS). - Chipset: support for Realtek H4-transport controllers (for example, RTL8761CTV).
- Linux: HCI kernel socket transport and ALSA audio sink.
v1.8
- SM: CTKD active field in pairing complete event; explicit pairing trigger on security request.
- GATT: database hash with TLV caching.
- Chipset: LC3 offload for Infineon and Realtek controllers.
- HCI Dump: printf-to-log with
ENABLE_PRINTF_TO_LOG.
v1.8.1
- HCI: Bluetooth Core v6.2 commands and events, including Channel Sounding definitions.
- GAP:
ENABLE_LE_SHORTER_CONNECTION_INTERVALSwithgap_request_connection_rate_update()/gap_request_frame_space_update(). - Many parser robustness fixes (AVDTP, AVRCP, HID Host, HFP).
v1.8.2
- Security defaults tightened: minimum LE/BR-EDR encryption key size raised to 16 bytes; Secure Connections Only mode enabled by default; SSP auto-accept disabled by default.
- GAP: LE Data Length configuration; LE link-layer commands now sequential
- A2DP: MPEG-D USAC support; LE Audio Broadcast/Unicast Lite examples.
- HCI: improved packet validation; CIS/BIG state management fixes.
- Various parser security hardening (L2CAP, AVRCP, BNEP, HID, RFCOMM, OBEX).
btstack_crypto: fixed DHKey calculation for newer mbedTLS requiringf_rnd.
MbedTLS
Updated from v3.6.2 to v3.6.6. The 3.6.6 release contains several security fixes:
- CVE-2026-25833 — buffer underflow in IPv6 address parsing (
x509_inet_pton_ipv6). - CVE-2026-25834 — TLS 1.2 client accepted server key-exchange messages signed with a disallowed algorithm.
- CVE-2026-25835 — RNG state duplication after
fork()or VM snapshot resume; newpsa_random_reseed()/psa_random_deplete()APIs provided. - Default entropy source changed from
/dev/urandomto/dev/random. - FFDH: low-order element validation added.
- CCM: tag-length validation in
mbedtls_ccm_finish(). - GCM tag calculation fixed under GCC 10–14 with
-O3without AESNI/AESCE.
CMake build
- Added support for GCC 15.
- Added support for LLVM Embedded Toolchain for Arm 21.
gcc-riscv32-pico-elfis now the preferred RISC-V compiler because it supports all the latest architecture features present in RP2350.- For a chosen RISC-V compiler, multiple architecture options are tried (from most exotic to least) until a supported set is found.
-mcpu=hazard3-rp2350is used ongcc-riscv32-pico-elfto provide the optimiser the most accurate processor information.- Added support for The xPack GNU RISC-V Embedded GCC, a part of Eclipse Embedded CDT.
- Added support for hard-float ABI (
-mfloat-abi=hard) on RP2350 (Arm Cortex-M33) through the CMake variable,PICO_HARD_FLOAT_ABI=1. - The build now auto-detects whether the compiler (when specified using
PICO_TOOLCHAIN_PATH) is GCC or LLVM/Clang, so the user no longer needs to specifyPICO_COMPILERmanually. - The build now auto-detects whether the compiler includes Newlib or Picolibc, so the user no longer needs to specify
PICO_CLIBmanually. - Removed
--specs=nosys.specsfrom build (was only used for GCC) because this confusingly named option actually pulls in system stubs, which we shouldn't need becausepico_clib_interfaceimplements the needed hooks. - Fixed GCC 6 builds (had been broken for some time — was using an incorrect set of libraries causing hard faults on execution).
- All
PICO_DEFAULT_XXX_IMPLCMake variables (for example,PICO_DEFAULT_STDIO_IMPL) can now be overridden. They now expect a bare library suffix (the prefix - for example,pico_stdio_forPICO_DEFAULT_STDIO_IMPL- is added automatically), consistent withpico_set_xxx_impl(). Existing values that already include the prefix continue to work; however, if you were using a custom library name not starting with the correct prefix before, you must rename it.
Bazel build
- Added support for hard-float ABI on RP2350 (Arm Cortex-M33).
- Updated to a newer Clang toolchain.
New examples
There are new examples in the pico-examples repository. A new Low Power section was added covering dormant, power-state, and sleep modes using the new pico_low_power library. A new async_context section and a top-level bluetooth/ directory for standalone BLE examples (previously under pico_w/bt/standalone/) were also added.
| Example | Description |
|---|---|
| ble_doorbell | Detect a button press on a transmitter Pico and illuminate an LED on a receiver Pico through BLE. |
| ble_pointer | Bluetooth HID mouse using an MPU6050 to detect angle and move the cursor. |
| ble_secure_temp_client | Connect to ble_secure_temp_server and read the temperature. |
| ble_secure_temp_server | Variant of ble_temp_server allowing exploration of LE Secure Connection configurations. |
| ble_wifi_provisioner | Provision Wi-Fi credentials over BLE using a mobile app or included Python script. |
| gatt_counter_with_wifi | GATT Server - Heartbeat Counter over GATT (with Wi-Fi). |
| gatt_streamer_server_with_wifi | Performance - Stream Data over GATT (Server, with Wi-Fi). |
| gps_uart | Interpret standard NMEA data received from a GPS device connected to a UART. |
| ina219_i2c | Monitor power usage using an INA219 sensor, via I2C. |
| ina228_i2c | Monitor power usage using an INA228 sensor, via I2C. |
| ina237_i2c | Monitor power usage using an INA237 sensor, via I2C. |
| ina260_i2c | Monitor power usage using an INA260 sensor, via I2C. |
| low_power_dormant_gpio | Go dormant (disable clocks) and wake up on a GPIO. |
| low_power_dormant_timer | Go dormant (disable clocks) and wake up on a timer. |
| low_power_pstate_gpio | Go to a lower power state (RP2350 only) and restart on a GPIO. |
| low_power_pstate_timer | Go to a lower power state (RP2350 only) and restart on an AON timer. |
| low_power_sleep_gpio | Go to sleep and wake up on a GPIO. |
| low_power_sleep_timer | Go to sleep and wake up on a timer. |
| pan_lwip_http_server | Networking - Bluetooth PAN with lwIP HTTP Server. |
| pbap_client_demo | PBAP Client - Load Phonebook from Server. |
| picow_access_point_wifi_provisioning | Start a Wi-Fi access point and provision Wi-Fi credentials through a web page. |
| picow_ntp_system_time | Create a background time-of-day clock that periodically synchronizes from a pool of NTP servers. |
| picow_router_solicit | Demonstrate using Wi-Fi without LwIP by sending an IPv6 router solicitation. |
| sdp_bnep_query | SDP Client - Query BNEP SDP record. |
| simple_at_time_worker | Use a worker on a threadsafe background context to blink the on-board LED. |
| spp_streamer_with_wifi | Performance - Stream Data over SPP (Server, with Wi-Fi). |
| ssd1309_spi | Display text on an SSD1309-driven OLED display through SPI. |
| ssd1309_stdout_spi | Display stdout text and simple graphics on an SSD1309-based OLED panel through SPI. |
Modified Examples
The standalone Bluetooth examples previously under pico_w/bt/standalone/ were moved to a new top-level bluetooth/ directory and renamed. All BTstack examples were renamed, dropping the picow_bt_example_ prefix (for example, picow_bt_example_gatt_counter → gatt_counter).
| Example | Description |
|---|---|
| ble_temp_client | Renamed from picow_ble_temp_reader; moved to bluetooth/ble_temp_sensor. Previous picow_ble_temp_sensor_with_wifi removed. |
| ble_temp_server | Renamed from picow_ble_temp_sensor; moved to bluetooth/ble_temp_sensor. |
| blink_universal | Moved to its own universal/blink_universal directory. |
Bluetooth (BTstack) examples
The BTstack examples have moved from pico_w/bt/ to bluetooth/btstack_examples.
The source code for these examples still comes from lib/btstack/example.
Each example now has its own self-contained CMake file instead of relying on shared CMake helper functions. This makes it much easier to copy an example out of the tree and adapt it as a starting point for your own project.
The BTstack examples should now work with the Pico VS Code extension.
Authors
Thanks to the following for their contributions:
adam.nelson,
alastairpatrick,
Andrew Kohlsmith,
Andrew Pochinchik,
Andrew Scheller,
Andrii Anoshyn,
Andy Lin,
armandomontanez,
BlockListed,
Carl Hamilton,
DeepPG,
Disappear9,
dmitrykos,
drewpo28,
Earle F. Philhower, III,
Edward Hesketh,
FLyrfors-MI,
Gonzalo Larralde,
Graham Sanderson.
Jaylon Gowie,
jdomnitz,
Jérôme Hordies,
josch,
Josip Šimun Kuči,
Keith Packard,
kripton,
Liam Fraser,
Lloyd Pique
Luke Wren,
m24goller09,
madh4tter,
martijn,
Martin Budden,
Miaou,
Michel Le Bihan,
Nephtaly Aniceta,
Norman Dunbar,
Peter Harper,
Peter N Lewis,
Petr Hosek,
Prabhu Rajasekaran,
qqqlab,
Rainer Keller,
Richard Hulme,
Romain,
Will Stranton,
William Vinnicombe,