diff --git a/examples/pico-sdk/pico-w-picosdk-builtin/CMakeLists.txt b/examples/pico-sdk/pico-w-picosdk-baremetal-builtin/CMakeLists.txt similarity index 84% rename from examples/pico-sdk/pico-w-picosdk-builtin/CMakeLists.txt rename to examples/pico-sdk/pico-w-picosdk-baremetal-builtin/CMakeLists.txt index f0414489..bfbb283b 100644 --- a/examples/pico-sdk/pico-w-picosdk-builtin/CMakeLists.txt +++ b/examples/pico-sdk/pico-w-picosdk-baremetal-builtin/CMakeLists.txt @@ -16,7 +16,7 @@ target_include_directories(firmware PUBLIC . ) -target_link_libraries(firmware hardware_pio hardware_dma pico_stdlib pico_rand cyw43_driver_picow) +target_link_libraries(firmware pico_stdlib pico_rand pico_cyw43_driver pico_cyw43_arch_none) pico_add_extra_outputs(firmware) # create map/bin/hex file etc. pico_enable_stdio_usb(firmware 1) # Route stdio diff --git a/examples/pico-sdk/pico-w-picosdk-builtin/Makefile b/examples/pico-sdk/pico-w-picosdk-baremetal-builtin/Makefile similarity index 72% rename from examples/pico-sdk/pico-w-picosdk-builtin/Makefile rename to examples/pico-sdk/pico-w-picosdk-baremetal-builtin/Makefile index 1149396c..3d506e74 100644 --- a/examples/pico-sdk/pico-w-picosdk-builtin/Makefile +++ b/examples/pico-sdk/pico-w-picosdk-baremetal-builtin/Makefile @@ -12,10 +12,10 @@ build: pico-sdk build/firmware.uf2 build/firmware.uf2: $(MKBUILD) - cd build && cmake -G "Unix Makefiles" .. && make + cd build && cmake -DPICO_BOARD="pico_w" -G "Unix Makefiles" .. && make pico-sdk: - git clone --depth 1 -b 1.5.1 https://github.com/raspberrypi/pico-sdk $@ + git clone --depth 1 -b 2.0.0 https://github.com/raspberrypi/pico-sdk $@ cd $@ && git submodule update --init clean: diff --git a/examples/pico-sdk/pico-w-picosdk-builtin/README.md b/examples/pico-sdk/pico-w-picosdk-baremetal-builtin/README.md similarity index 100% rename from examples/pico-sdk/pico-w-picosdk-builtin/README.md rename to examples/pico-sdk/pico-w-picosdk-baremetal-builtin/README.md diff --git a/examples/pico-sdk/pico-w-picosdk-builtin/driver_pico-w.c b/examples/pico-sdk/pico-w-picosdk-baremetal-builtin/driver_pico-w.c similarity index 55% rename from examples/pico-sdk/pico-w-picosdk-builtin/driver_pico-w.c rename to examples/pico-sdk/pico-w-picosdk-baremetal-builtin/driver_pico-w.c index 3743214b..f8beb2b9 100644 --- a/examples/pico-sdk/pico-w-picosdk-builtin/driver_pico-w.c +++ b/examples/pico-sdk/pico-w-picosdk-baremetal-builtin/driver_pico-w.c @@ -7,8 +7,8 @@ #include "pico/stdlib.h" #include "pico/unique_id.h" +#include "pico/cyw43_arch.h" #include "cyw43.h" -#include "cyw43_country.h" #include "mongoose.h" #include "driver_pico-w.h" @@ -19,10 +19,11 @@ static struct mg_tcpip_if *s_ifp; static bool mg_tcpip_driver_pico_w_init(struct mg_tcpip_if *ifp) { struct mg_tcpip_driver_pico_w_data *d = (struct mg_tcpip_driver_pico_w_data *) ifp->driver_data; s_ifp = ifp; - // initialize WiFi chip and connect to network - cyw43_init(&cyw43_state); - cyw43_wifi_set_up(&cyw43_state, CYW43_ITF_STA, true, CYW43_COUNTRY_WORLDWIDE); - cyw43_wifi_join(&cyw43_state, strlen(d->ssid), d->ssid, strlen(d->pass), d->pass, CYW43_AUTH_WPA2_AES_PSK, NULL, CYW43_ITF_STA); + if (cyw43_arch_init() != 0) return false; // initialize async_context and WiFi chip + cyw43_arch_enable_sta_mode(); + // start connecting to network + if (cyw43_arch_wifi_connect_bssid_async(d->ssid, NULL, d->pass, CYW43_AUTH_WPA2_AES_PSK) != 0) + return false; cyw43_wifi_get_mac(&cyw43_state, CYW43_ITF_STA, ifp->mac); return true; } @@ -34,11 +35,7 @@ static size_t mg_tcpip_driver_pico_w_tx(const void *buf, size_t len, } static bool mg_tcpip_driver_pico_w_up(struct mg_tcpip_if *ifp) { - return cyw43_wifi_link_status(&cyw43_state, CYW43_ITF_STA) == CYW43_LINK_JOIN ? 1 : 0; -} - -void driver_pico_w_poll(void) { - cyw43_poll(); + return (cyw43_wifi_link_status(&cyw43_state, CYW43_ITF_STA) == CYW43_LINK_JOIN); } struct mg_tcpip_driver mg_tcpip_driver_pico_w = { @@ -48,32 +45,17 @@ struct mg_tcpip_driver mg_tcpip_driver_pico_w = { mg_tcpip_driver_pico_w_up, }; -void cyw43_cb_tcpip_init(cyw43_t *self, int itf) {} -void cyw43_cb_tcpip_deinit(cyw43_t *self, int itf) {} -void cyw43_cb_tcpip_set_link_up(cyw43_t *self, int itf) {} -void cyw43_cb_tcpip_set_link_down(cyw43_t *self, int itf) {} - -// Called once per outstanding frame during a call to cyw43_poll +// Called once per outstanding frame by async_context void cyw43_cb_process_ethernet(void *cb_data, int itf, size_t len, const uint8_t *buf) { if (itf != CYW43_ITF_STA) return; mg_tcpip_qwrite((void *) buf, len, s_ifp); (void) cb_data; } -// Return mac address -void cyw43_hal_get_mac(__unused int idx, uint8_t buf[6]) { - memcpy(buf, cyw43_state.mac, 6); -} +// Called by async_context +void cyw43_cb_tcpip_set_link_up(cyw43_t *self, int itf) {} +void cyw43_cb_tcpip_set_link_down(cyw43_t *self, int itf) {} -// Generate a mac address if one is not set in otp -void cyw43_hal_generate_laa_mac(__unused int idx, uint8_t buf[6]) { - pico_unique_board_id_t board_id; - MG_DEBUG(("No MAC in cyw43 OTP, generated from board id")); - pico_get_unique_board_id(&board_id); - memcpy(buf, &board_id.id[2], 6); - buf[0] &= (uint8_t)~0x1; // unicast - buf[0] |= 0x2; // locally administered -} // there's life beyond lwIP void pbuf_copy_partial(void){(void)0;} diff --git a/examples/pico-sdk/pico-w-picosdk-builtin/driver_pico-w.h b/examples/pico-sdk/pico-w-picosdk-baremetal-builtin/driver_pico-w.h similarity index 81% rename from examples/pico-sdk/pico-w-picosdk-builtin/driver_pico-w.h rename to examples/pico-sdk/pico-w-picosdk-baremetal-builtin/driver_pico-w.h index ce0e4756..6e9fba58 100644 --- a/examples/pico-sdk/pico-w-picosdk-builtin/driver_pico-w.h +++ b/examples/pico-sdk/pico-w-picosdk-baremetal-builtin/driver_pico-w.h @@ -6,5 +6,3 @@ struct mg_tcpip_driver_pico_w_data { }; extern struct mg_tcpip_driver mg_tcpip_driver_pico_w; - -void driver_pico_w_poll(void); diff --git a/examples/pico-sdk/pico-w-picosdk-builtin/main.c b/examples/pico-sdk/pico-w-picosdk-baremetal-builtin/main.c similarity index 97% rename from examples/pico-sdk/pico-w-picosdk-builtin/main.c rename to examples/pico-sdk/pico-w-picosdk-baremetal-builtin/main.c index bda3da0c..eef698d4 100644 --- a/examples/pico-sdk/pico-w-picosdk-builtin/main.c +++ b/examples/pico-sdk/pico-w-picosdk-baremetal-builtin/main.c @@ -43,7 +43,6 @@ int main(void) { MG_INFO(("Starting event loop")); for (;;) { - driver_pico_w_poll(); mg_mgr_poll(&mgr, 0); } diff --git a/examples/pico-sdk/pico-w-picosdk-builtin/mongoose.c b/examples/pico-sdk/pico-w-picosdk-baremetal-builtin/mongoose.c similarity index 100% rename from examples/pico-sdk/pico-w-picosdk-builtin/mongoose.c rename to examples/pico-sdk/pico-w-picosdk-baremetal-builtin/mongoose.c diff --git a/examples/pico-sdk/pico-w-picosdk-builtin/mongoose.h b/examples/pico-sdk/pico-w-picosdk-baremetal-builtin/mongoose.h similarity index 100% rename from examples/pico-sdk/pico-w-picosdk-builtin/mongoose.h rename to examples/pico-sdk/pico-w-picosdk-baremetal-builtin/mongoose.h diff --git a/examples/pico-sdk/pico-w-picosdk-builtin/mongoose_config.h b/examples/pico-sdk/pico-w-picosdk-baremetal-builtin/mongoose_config.h similarity index 100% rename from examples/pico-sdk/pico-w-picosdk-builtin/mongoose_config.h rename to examples/pico-sdk/pico-w-picosdk-baremetal-builtin/mongoose_config.h diff --git a/examples/pico-sdk/pico-w-picosdk-builtin/net.c b/examples/pico-sdk/pico-w-picosdk-baremetal-builtin/net.c similarity index 100% rename from examples/pico-sdk/pico-w-picosdk-builtin/net.c rename to examples/pico-sdk/pico-w-picosdk-baremetal-builtin/net.c diff --git a/examples/pico-sdk/pico-w-picosdk-builtin/net.h b/examples/pico-sdk/pico-w-picosdk-baremetal-builtin/net.h similarity index 100% rename from examples/pico-sdk/pico-w-picosdk-builtin/net.h rename to examples/pico-sdk/pico-w-picosdk-baremetal-builtin/net.h diff --git a/examples/pico-sdk/pico-w-picosdk-builtin/packed_fs.c b/examples/pico-sdk/pico-w-picosdk-baremetal-builtin/packed_fs.c similarity index 100% rename from examples/pico-sdk/pico-w-picosdk-builtin/packed_fs.c rename to examples/pico-sdk/pico-w-picosdk-baremetal-builtin/packed_fs.c diff --git a/examples/pico-sdk/pico-w-picosdk-builtin/pico_sdk_import.cmake b/examples/pico-sdk/pico-w-picosdk-baremetal-builtin/pico_sdk_import.cmake similarity index 81% rename from examples/pico-sdk/pico-w-picosdk-builtin/pico_sdk_import.cmake rename to examples/pico-sdk/pico-w-picosdk-baremetal-builtin/pico_sdk_import.cmake index 65f8a6f7..a0721d0d 100644 --- a/examples/pico-sdk/pico-w-picosdk-builtin/pico_sdk_import.cmake +++ b/examples/pico-sdk/pico-w-picosdk-baremetal-builtin/pico_sdk_import.cmake @@ -18,9 +18,20 @@ if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT_PATH} AND (NOT PICO_SDK_FETCH_FROM_GIT_P message("Using PICO_SDK_FETCH_FROM_GIT_PATH from environment ('${PICO_SDK_FETCH_FROM_GIT_PATH}')") endif () +if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT_TAG} AND (NOT PICO_SDK_FETCH_FROM_GIT_TAG)) + set(PICO_SDK_FETCH_FROM_GIT_TAG $ENV{PICO_SDK_FETCH_FROM_GIT_TAG}) + message("Using PICO_SDK_FETCH_FROM_GIT_TAG from environment ('${PICO_SDK_FETCH_FROM_GIT_TAG}')") +endif () + +if (PICO_SDK_FETCH_FROM_GIT AND NOT PICO_SDK_FETCH_FROM_GIT_TAG) + set(PICO_SDK_FETCH_FROM_GIT_TAG "master") + message("Using master as default value for PICO_SDK_FETCH_FROM_GIT_TAG") +endif() + set(PICO_SDK_PATH "${PICO_SDK_PATH}" CACHE PATH "Path to the Raspberry Pi Pico SDK") set(PICO_SDK_FETCH_FROM_GIT "${PICO_SDK_FETCH_FROM_GIT}" CACHE BOOL "Set to ON to fetch copy of SDK from git if not otherwise locatable") set(PICO_SDK_FETCH_FROM_GIT_PATH "${PICO_SDK_FETCH_FROM_GIT_PATH}" CACHE FILEPATH "location to download SDK") +set(PICO_SDK_FETCH_FROM_GIT_TAG "${PICO_SDK_FETCH_FROM_GIT_TAG}" CACHE FILEPATH "release tag for SDK") if (NOT PICO_SDK_PATH) if (PICO_SDK_FETCH_FROM_GIT) @@ -34,14 +45,14 @@ if (NOT PICO_SDK_PATH) FetchContent_Declare( pico_sdk GIT_REPOSITORY https://github.com/raspberrypi/pico-sdk - GIT_TAG master + GIT_TAG ${PICO_SDK_FETCH_FROM_GIT_TAG} GIT_SUBMODULES_RECURSE FALSE ) else () FetchContent_Declare( pico_sdk GIT_REPOSITORY https://github.com/raspberrypi/pico-sdk - GIT_TAG master + GIT_TAG ${PICO_SDK_FETCH_FROM_GIT_TAG} ) endif () diff --git a/examples/pico-sdk/pico-w-picosdk-builtin/cyw43_configport.h b/examples/pico-sdk/pico-w-picosdk-builtin/cyw43_configport.h deleted file mode 100644 index 21c38695..00000000 --- a/examples/pico-sdk/pico-w-picosdk-builtin/cyw43_configport.h +++ /dev/null @@ -1,164 +0,0 @@ -/* - * Copyright (c) 2022 Raspberry Pi (Trading) Ltd. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -// This header is included by cyw43_driver to setup its environment - -// THIS FILE HAS BEEN EDITED, ORIGINAL FILE IN PICO-SDK - -#ifndef _CYW43_CONFIGPORT_H -#define _CYW43_CONFIGPORT_H - -#include "boards/pico_w.h" -#include "hardware/gpio.h" -#include "pico/error.h" -#include "pico/time.h" - -#ifdef __cplusplus -extern "C" { -#endif - -// Use our own TCP/IP stack -#define CYW43_LWIP 0 - -#ifndef CYW43_HOST_NAME -#define CYW43_HOST_NAME "Mongoose" -#endif - -#ifndef CYW43_GPIO -#define CYW43_GPIO 1 -#endif - -#ifndef CYW43_LOGIC_DEBUG -#define CYW43_LOGIC_DEBUG 0 -#endif - -#ifndef CYW43_USE_OTP_MAC -#define CYW43_USE_OTP_MAC 1 -#endif - -#ifndef CYW43_NO_NETUTILS -#define CYW43_NO_NETUTILS 1 -#endif - -#ifndef CYW43_IOCTL_TIMEOUT_US -#define CYW43_IOCTL_TIMEOUT_US 1000000 -#endif - -#ifndef CYW43_USE_STATS -#define CYW43_USE_STATS 0 -#endif - -// todo should this be user settable? -#ifndef CYW43_HAL_MAC_WLAN0 -#define CYW43_HAL_MAC_WLAN0 0 -#endif - -#ifndef STATIC -#define STATIC static -#endif - -#ifndef CYW43_USE_SPI -#define CYW43_USE_SPI 1 -#endif - -#ifndef CYW43_SPI_PIO -#define CYW43_SPI_PIO 1 -#endif - -#ifndef CYW43_CHIPSET_FIRMWARE_INCLUDE_FILE -#if CYW43_ENABLE_BLUETOOTH -#define CYW43_CHIPSET_FIRMWARE_INCLUDE_FILE "wb43439A0_7_95_49_00_combined.h" -#else -#define CYW43_CHIPSET_FIRMWARE_INCLUDE_FILE "w43439A0_7_95_49_00_combined.h" -#endif -#endif - -#ifndef CYW43_WIFI_NVRAM_INCLUDE_FILE -#define CYW43_WIFI_NVRAM_INCLUDE_FILE "wifi_nvram_43439.h" -#endif - -// Note, these are negated, because cyw43_driver negates them before returning! -#define CYW43_EPERM (-PICO_ERROR_NOT_PERMITTED) // Operation not permitted -#define CYW43_EIO (-PICO_ERROR_IO) // I/O error -#define CYW43_EINVAL (-PICO_ERROR_INVALID_ARG) // Invalid argument -#define CYW43_ETIMEDOUT (-PICO_ERROR_TIMEOUT) // Connection timed out - -#define CYW43_NUM_GPIOS CYW43_WL_GPIO_COUNT - -#define cyw43_hal_pin_obj_t uint - -// get the number of elements in a fixed-size array -#define CYW43_ARRAY_SIZE(a) count_of(a) - -static inline uint32_t cyw43_hal_ticks_us(void) { - return time_us_32(); -} - -static inline uint32_t cyw43_hal_ticks_ms(void) { - return to_ms_since_boot(get_absolute_time()); -} - -static inline int cyw43_hal_pin_read(cyw43_hal_pin_obj_t pin) { - return gpio_get(pin); -} - -static inline void cyw43_hal_pin_low(cyw43_hal_pin_obj_t pin) { - gpio_clr_mask(1 << pin); -} - -static inline void cyw43_hal_pin_high(cyw43_hal_pin_obj_t pin) { - gpio_set_mask(1 << pin); -} - -#define CYW43_HAL_PIN_MODE_INPUT (GPIO_IN) -#define CYW43_HAL_PIN_MODE_OUTPUT (GPIO_OUT) - -#define CYW43_HAL_PIN_PULL_NONE (0) -#define CYW43_HAL_PIN_PULL_UP (1) -#define CYW43_HAL_PIN_PULL_DOWN (2) - -static inline void cyw43_hal_pin_config(cyw43_hal_pin_obj_t pin, uint32_t mode, uint32_t pull, __unused uint32_t alt) { - assert((mode == CYW43_HAL_PIN_MODE_INPUT || mode == CYW43_HAL_PIN_MODE_OUTPUT) && alt == 0); - gpio_set_dir(pin, mode); - gpio_set_pulls(pin, pull == CYW43_HAL_PIN_PULL_UP, pull == CYW43_HAL_PIN_PULL_DOWN); -} - -void cyw43_hal_get_mac(int idx, uint8_t buf[6]); - -void cyw43_hal_generate_laa_mac(int idx, uint8_t buf[6]); - - -// documentation is king -#define CYW43_THREAD_ENTER -#define CYW43_THREAD_EXIT -#define CYW43_THREAD_LOCK_CHECK - -// ??? and the ';' at the end is needed -#define CYW43_SDPCM_SEND_COMMON_WAIT (void) 0; -#define CYW43_DO_IOCTL_WAIT (void) 0; - -#define cyw43_delay_ms sleep_ms -#define cyw43_delay_us sleep_us -static inline void cyw43_schedule_internal_poll_dispatch(void (*func)(void)){ - (void)func; // do nothing, we'll call it anyway -} - -#define CYW43_POST_POLL_HOOK - -// Allow malloc and free to be changed -#ifndef cyw43_malloc -#define cyw43_malloc malloc -#endif -#ifndef cyw43_free -#define cyw43_free free -#endif - -#ifdef __cplusplus -} -#endif - - -#endif