// Necessary includes from the Pico SDK #include #include #include #include #include #define CLIENT //#define SERVER #define STA_MODE //#define AP_MODE #ifdef STA_MODE #define SSID "thinkpad-T440p" #define PASSWORD "CDuKaka2000!" #endif // STA_MODE #ifdef AP_MODE #define AP_SSID "PicoAP" #define AP_PASSWORD "PicoPassword!" #define AP_CHANNEL 3 #endif // AP_MODE #ifdef CLIENT #define CLIENT_PORT 4243 static void udp_recv_callback(void *arg, struct udp_pcb *pcb, struct pbuf *p, const ip_addr_t *addr, u16_t port) { puts("Callback"); if(p->len == 1) { printf("a:%d\n", ((uint8_t *)p->payload)[0]); } pbuf_free(p); } #endif // CLIENT int main() { stdio_init_all(); sleep_ms(2000); puts("Pi Starting..."); if(cyw43_arch_init_with_country(CYW43_COUNTRY_FRANCE)) { puts("CYW43 arch init failed"); return -1; } if(cyw43_wifi_pm(&cyw43_state, CYW43_NO_POWERSAVE_MODE)) { puts("CYW43 no powersave mode failed"); return -1; } puts("CYW43 arch initialized"); #ifdef STA_MODE cyw43_arch_enable_sta_mode(); for(int error_code = 1; error_code; ) { printf("WiFi connection attempt to \"%s\"\n", SSID); error_code = cyw43_arch_wifi_connect_timeout_ms(SSID, PASSWORD, CYW43_AUTH_WPA2_AES_PSK, 10000); if(error_code) { const char *error_message; switch(error_code) { case PICO_ERROR_TIMEOUT: error_message = "Timeout reached"; break; case PICO_ERROR_BADAUTH: error_message = "Bad password"; break; case PICO_ERROR_CONNECT_FAILED: error_message = "Some reason"; break; } printf("Connection failed : %s\n", error_message); } } puts("WiFi connected"); #endif // STA_MODE #ifdef AP_MODE cyw43_arch_enable_ap_mode(AP_SSID, AP_PASSWORD, CYW43_AUTH_WPA2_AES_PSK); cyw43_wifi_ap_set_channel(&cyw43_state, AP_CHANNEL); puts("AP mode enabled"); #endif //AP_MODE #ifdef CLIENT struct udp_pcb *pcb = udp_new(); if(!pcb) { puts("UDP pcb init failed"); return -1; } udp_recv(pcb, udp_recv_callback, NULL); if(udp_bind(pcb, IP4_ADDR_ANY, CLIENT_PORT)) { puts("UDP pcb bind failed"); return -1; } #endif // CLIENT // ========================== Main loop ========================== while(true) { cyw43_arch_poll(); #ifdef STA_MODE int ret = cyw43_wifi_link_status(&cyw43_state, CYW43_ITF_STA); if(ret != CYW43_LINK_JOIN) { const char *status_message; switch(ret) { case CYW43_LINK_DOWN: status_message = "WiFi down"; break; case CYW43_LINK_JOIN: status_message = "WiFi up"; break; case CYW43_LINK_FAIL: status_message = "WiFi connection failed"; break; case CYW43_LINK_NONET: status_message = "Network not found"; break; case CYW43_LINK_BADAUTH: status_message = "Bad auth"; break; } puts(status_message); } #endif // STA_MODE tight_loop_contents(); } }