void user_init(void) { // Configure the UART uart_init(BIT_RATE_115200,0); // Enable system messages system_set_os_print(1); os_printf("\r\nSDK version: %s\n", system_get_sdk_version()); os_printf("System init...\r\n"); os_printf("ESP8266 is %s mode, restarting in %s mode...\r\n", WiFiMode[wifi_get_opmode()], WiFiMode[STATION_MODE]); setup_wifi_st_mode(); if(wifi_get_phy_mode() != PHY_MODE_11N) wifi_set_phy_mode(PHY_MODE_11N); if(wifi_station_get_auto_connect() == 0) wifi_station_set_auto_connect(1); // Init DHT22 sensor DHTInit(DHT22); // Wait for Wi-Fi connection os_timer_disarm(&WiFiLinker); os_timer_setfn(&WiFiLinker, (os_timer_func_t *)wifi_check_ip, NULL); os_timer_arm(&WiFiLinker, 1000, 0); // Set up a timer to send the message os_timer_disarm(&dht22_timer); os_timer_setfn(&dht22_timer, (os_timer_func_t *)dht22_cb, (void *)0); os_timer_arm(&dht22_timer, DATA_SEND_DELAY, 1); os_printf("System init done.\n"); }
/** * wifi.getphymode() * Description: * Get wifi physical mode(802.11 b/g/n) * Syntax: * wifi.getphymode() * Parameters: * nil * Returns: * Current physical mode. * */ static int wifi_getphymode( lua_State* L ) { unsigned mode; mode = (unsigned)wifi_get_phy_mode(); lua_pushinteger( L, mode ); return 1; }
void ICACHE_FLASH_ATTR tcpserver_init(void) { int8_t res; tcp_server.type = ESPCONN_TCP; tcp_server.state = ESPCONN_NONE; tcp_server.proto.tcp = &tcp_config; tcp_server.proto.tcp->local_port = TCP_SERVER_LOCAL_PORT; espconn_regist_connectcb(&tcp_server, incoming_connection_callback); espconn_tcp_set_max_con_allow(&tcp_server, 1); //Allow 1 connection max res = espconn_accept(&tcp_server); if(res == 0) os_printf("Created TCP server on port %d, running on ROM %d, AP RSSI: %ddBm, WiFi mode: %d.\r\n", tcp_server.proto.tcp->local_port, system_upgrade_userbin_check(), wifi_station_get_rssi(), wifi_get_phy_mode()); else os_printf("Failed to create TCP server, error code: %d.\r\n", res); }
// print various Wifi information into json buffer int ICACHE_FLASH_ATTR printWifiInfo(char *buff) { int len; struct station_config stconf; wifi_station_get_config(&stconf); uint8_t op = wifi_get_opmode() & 0x3; char *mode = wifiMode[op]; char *status = "unknown"; int st = wifi_station_get_connect_status(); if (st > 0 && st < sizeof(connStatuses)) status = connStatuses[st]; int p = wifi_get_phy_mode(); char *phy = wifiPhy[p&3]; char *warn = wifiWarn[op]; sint8 rssi = wifi_station_get_rssi(); if (rssi > 0) rssi = 0; uint8 mac_addr[6]; wifi_get_macaddr(0, mac_addr); len = os_sprintf(buff, "\"mode\": \"%s\", \"ssid\": \"%s\", \"status\": \"%s\", \"phy\": \"%s\", " "\"rssi\": \"%ddB\", \"warn\": \"%s\", \"passwd\": \"%s\", " "\"mac\":\"%02x:%02x:%02x:%02x:%02x:%02x\"", mode, (char*)stconf.ssid, status, phy, rssi, warn, (char*)stconf.password, mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]); struct ip_info info; if (wifi_get_ip_info(0, &info)) { len += os_sprintf(buff+len, ", \"ip\": \"%d.%d.%d.%d\"", (info.ip.addr>>0)&0xff, (info.ip.addr>>8)&0xff, (info.ip.addr>>16)&0xff, (info.ip.addr>>24)&0xff); } else {
static void ICACHE_FLASH_ATTR startUp() { TESTP("\n%s ( %s - %s ) starting ...\n", "MQTT Bridge", wifi_station_get_hostname(), version); INFOP("wifi_get_phy_mode = %d\n", wifi_get_phy_mode()); // os_timer_disarm(&uartTimer); // os_timer_setfn(&uartTimer, (os_timer_func_t *) uartTimerCb, (void *) 0); // os_timer_arm(&uartTimer, 10 * 1000, true); if ( !system_os_task(backgroundTask, USER_TASK_PRIO_1, taskQueue, QUEUE_SIZE)) ERRORP("Can't set up background task\n"); lastAction = INIT_DONE; }
// print various Wifi information into json buffer int ICACHE_FLASH_ATTR printWifiInfo(char *buff) { int len; //struct station_config stconf; wifi_station_get_config(&stconf); //struct softap_config apconf; wifi_softap_get_config(&apconf); uint8_t op = wifi_get_opmode() & 0x3; char *mode = wifiMode[op]; char *status = "unknown"; int st = wifi_station_get_connect_status(); if (st >= 0 && st < sizeof(connStatuses)) status = connStatuses[st]; int p = wifi_get_phy_mode(); char *phy = wifiPhy[p&3]; char *warn = wifiWarn[op]; if (op == 3) op = 4; // Done to let user switch to AP only mode from Soft-AP settings page, using only one set of warnings char *apwarn = wifiWarn[op]; char *apauth = apAuthMode[apconf.authmode]; sint8 rssi = wifi_station_get_rssi(); if (rssi > 0) rssi = 0; uint8 mac_addr[6]; uint8 apmac_addr[6]; wifi_get_macaddr(0, mac_addr); wifi_get_macaddr(1, apmac_addr); uint8_t chan = wifi_get_channel(); len = os_sprintf(buff, "\"mode\": \"%s\", \"modechange\": \"%s\", \"ssid\": \"%s\", \"status\": \"%s\", " "\"phy\": \"%s\", \"rssi\": \"%ddB\", \"warn\": \"%s\", \"apwarn\": \"%s\", " "\"mac\":\"%02x:%02x:%02x:%02x:%02x:%02x\", \"chan\":\"%d\", \"apssid\": \"%s\", " "\"appass\": \"%s\", \"apchan\": \"%d\", \"apmaxc\": \"%d\", \"aphidd\": \"%s\", " "\"apbeac\": \"%d\", \"apauth\": \"%s\",\"apmac\":\"%02x:%02x:%02x:%02x:%02x:%02x\"", mode, MODECHANGE, (char*)stconf.ssid, status, phy, rssi, warn, apwarn, mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5], chan, (char*)apconf.ssid, (char*)apconf.password, apconf.channel, apconf.max_connection, apconf.ssid_hidden?"enabled":"disabled", apconf.beacon_interval, apauth,apmac_addr[0], apmac_addr[1], apmac_addr[2], apmac_addr[3], apmac_addr[4], apmac_addr[5]); struct ip_info info; if (wifi_get_ip_info(0, &info)) { len += os_sprintf(buff+len, ", \"ip\": \"%d.%d.%d.%d\"", IP2STR(&info.ip.addr)); len += os_sprintf(buff+len, ", \"netmask\": \"%d.%d.%d.%d\"", IP2STR(&info.netmask.addr)); len += os_sprintf(buff+len, ", \"gateway\": \"%d.%d.%d.%d\"", IP2STR(&info.gw.addr)); len += os_sprintf(buff+len, ", \"hostname\": \"%s\"", flashConfig.hostname); } else { len += os_sprintf(buff+len, ", \"ip\": \"-none-\""); } len += os_sprintf(buff+len, ", \"staticip\": \"%d.%d.%d.%d\"", IP2STR(&flashConfig.staticip)); len += os_sprintf(buff+len, ", \"dhcp\": \"%s\"", flashConfig.staticip > 0 ? "off" : "on"); return len; }
static int wifi_setphymode( lua_State* L ) { unsigned mode; mode = luaL_checkinteger( L, 1 ); if ( mode != PHY_MODE_11B && mode != PHY_MODE_11G && mode != PHY_MODE_11N ) return luaL_error( L, "wrong arg type" ); wifi_set_phy_mode( (uint8_t)mode); mode = (unsigned)wifi_get_phy_mode(); lua_pushinteger( L, mode ); return 1; }
void ICACHE_FLASH_ATTR wifiInit(int wifiMode) { INFO("\r===== WiFi Init =====\r"); wifi_set_opmode(0); // Clear all modes INFO("\r\nSetting WiFI\r\n"); if(wifiMode & SOFTAP_MODE) { INFO("\rSetting SOFTAP Mode\r\n"); setup_wifi_ap_mode(); INFO("Done\r\n"); } if(wifiMode & STATION_MODE) { INFO("\rSetting Station Mode \r\n"); setup_wifi_st_mode(); INFO("Done\r\n"); } if(wifi_get_phy_mode() != PHY_MODE_11N) wifi_set_phy_mode(PHY_MODE_11N); if(wifi_station_get_auto_connect() == 0) wifi_station_set_auto_connect(1); INFO("Wi-Fi mode: %s\r\n", WiFiMode[wifi_get_opmode()]); if(wifiMode & SOFTAP_MODE) { struct softap_config apConfig; if(wifi_softap_get_config(&apConfig)) { INFO("AP config: SSID: %s, PASSWORD: %s\r\n", apConfig.ssid, apConfig.password); } } if(wifiMode & STATION_MODE) { struct station_config stationConfig; if(wifi_station_get_config(&stationConfig)) { INFO("STA config: SSID: %s, PASSWORD: %s\r\n", stationConfig.ssid, stationConfig.password); } } }
LOCAL void ICACHE_FLASH_ATTR setup_ap_mode() { wifi_station_disconnect(); wifi_station_dhcpc_stop(); wifi_set_opmode(SOFTAP_MODE); struct softap_config apconfig; if (wifi_softap_get_config(&apconfig)) { wifi_softap_dhcps_stop(); char macaddr[6]; wifi_get_macaddr(SOFTAP_IF, macaddr); os_memset(apconfig.ssid, 0, sizeof(apconfig.ssid)); os_memset(apconfig.password, 0, sizeof(apconfig.password)); apconfig.ssid_len = os_sprintf(apconfig.ssid, "MacGyver-IoT_%02x%02x%02x%02x%02x%02x", MAC2STR(macaddr)); //os_sprintf(apconfig.password, "%02x%02x%02x%02x%02x%02x", MAC2STR(macaddr)); // 18fe349bc6b6 //os_sprintf(apconfig.password, "test"); // 18fe349bc6b6 //apconfig.authmode = AUTH_WPA_WPA2_PSK; // AUTH_OPEN apconfig.authmode = AUTH_OPEN; apconfig.ssid_hidden = 0; apconfig.channel = 7; apconfig.max_connection = 10; if (!wifi_softap_set_config(&apconfig)) { // CTRL not set AP config! } struct ip_info ipinfo; if (wifi_get_ip_info(SOFTAP_IF, &ipinfo)) { IP4_ADDR(&ipinfo.ip, 192, 168, 4, 1); IP4_ADDR(&ipinfo.gw, 192, 168, 4, 1); IP4_ADDR(&ipinfo.netmask, 255, 255, 255, 0); if (!wifi_set_ip_info(SOFTAP_IF, &ipinfo)) { // CTRL not set IP config! } } wifi_softap_dhcps_start(); } if (wifi_get_phy_mode() != PHY_MODE_11N) wifi_set_phy_mode(PHY_MODE_11N); }
void ESP8266WiFiClass::printDiag(Print& p) { const char* modes[] = {"NULL", "STA", "AP", "STA+AP"}; p.print("Mode: "); p.println(modes[wifi_get_opmode()]); const char* phymodes[] = {"", "B", "G", "N"}; p.print("PHY mode: "); p.println(phymodes[(int) wifi_get_phy_mode()]); p.print("Channel: "); p.println(wifi_get_channel()); p.print("AP id: "); p.println(wifi_station_get_current_ap_id()); p.print("Status: "); p.println(wifi_station_get_connect_status()); p.print("Auto connect: "); p.println(wifi_station_get_auto_connect()); static struct station_config conf; wifi_station_get_config(&conf); const char* ssid = reinterpret_cast<const char*>(conf.ssid); p.print("SSID ("); p.print(strlen(ssid)); p.print("): "); p.println(ssid); const char* passphrase = reinterpret_cast<const char*>(conf.password); p.print("Passphrase ("); p.print(strlen(passphrase)); p.print("): "); p.println(passphrase); p.print("BSSID set: "); p.println(conf.bssid_set); }
// print various Wifi information into json buffer int ICACHE_FLASH_ATTR printWifiInfo(char *buff) { int len; struct station_config stconf; wifi_station_get_config(&stconf); uint8_t op = wifi_get_opmode() & 0x3; char *mode = wifiMode[op]; char *status = "unknown"; int st = wifi_station_get_connect_status(); if (st >= 0 && st < sizeof(connStatuses)) status = connStatuses[st]; int p = wifi_get_phy_mode(); char *phy = wifiPhy[p&3]; char *warn = wifiWarn[op]; sint8 rssi = wifi_station_get_rssi(); if (rssi > 0) rssi = 0; uint8 mac_addr[6]; wifi_get_macaddr(0, mac_addr); uint8_t chan = wifi_get_channel(); len = os_sprintf(buff, "\"mode\": \"%s\", \"modechange\": \"%s\", \"ssid\": \"%s\", \"status\": \"%s\", \"phy\": \"%s\", " "\"rssi\": \"%ddB\", \"warn\": \"%s\", \"mac\":\"%02x:%02x:%02x:%02x:%02x:%02x\", \"chan\":%d", mode, MODECHANGE, (char*)stconf.ssid, status, phy, rssi, warn, mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5], chan); struct ip_info info; if (wifi_get_ip_info(0, &info)) { len += os_sprintf(buff+len, ", \"ip\": \"%d.%d.%d.%d\"", IP2STR(&info.ip.addr)); len += os_sprintf(buff+len, ", \"netmask\": \"%d.%d.%d.%d\"", IP2STR(&info.netmask.addr)); len += os_sprintf(buff+len, ", \"gateway\": \"%d.%d.%d.%d\"", IP2STR(&info.gw.addr)); len += os_sprintf(buff+len, ", \"hostname\": \"%s\"", flashConfig.hostname); } else { len += os_sprintf(buff+len, ", \"ip\": \"-none-\""); } len += os_sprintf(buff+len, ", \"staticip\": \"%d.%d.%d.%d\"", IP2STR(&flashConfig.staticip)); len += os_sprintf(buff+len, ", \"dhcp\": \"%s\"", flashConfig.staticip > 0 ? "off" : "on"); return len; }
void ICACHE_FLASH_ATTR wifiInit() { //if(wifi_get_opmode() != USE_WIFI_MODE) { #ifdef PLATFORM_DEBUG os_printf("ESP8266 not in %s mode, restarting in %s mode...\r\n", WiFiMode[USE_WIFI_MODE], WiFiMode[USE_WIFI_MODE]); #endif if(USE_WIFI_MODE & SOFTAP_MODE) setup_wifi_ap_mode(); if(USE_WIFI_MODE & STATION_MODE) setup_wifi_st_mode(); } if(wifi_get_phy_mode() != PHY_MODE_11N) wifi_set_phy_mode(PHY_MODE_11N); if(wifi_station_get_auto_connect() == 0) wifi_station_set_auto_connect(1); #ifdef PLATFORM_DEBUG os_printf("Wi-Fi mode: %s\r\n", WiFiMode[wifi_get_opmode()]); if(USE_WIFI_MODE & SOFTAP_MODE) { struct softap_config apConfig; if(wifi_softap_get_config(&apConfig)) { os_printf("AP config: SSID: %s, PASSWORD: %s\r\n", apConfig.ssid, apConfig.password); } } if(USE_WIFI_MODE & STATION_MODE) { struct station_config stationConfig; if(wifi_station_get_config(&stationConfig)) { os_printf("STA config: SSID: %s, PASSWORD: %s\r\n", stationConfig.ssid, stationConfig.password); } } #endif }
void user_init(void) { // Configure the UART uart_init(BIT_RATE_115200, BIT_RATE_115200); // Enable system messages system_set_os_print(1); DHT22_DEBUG("\n==== System info: ====\n"); DHT22_DEBUG("SDK version:%s rom %d\n", system_get_sdk_version(), system_upgrade_userbin_check()); DHT22_DEBUG("Time = %ld\n", system_get_time()); DHT22_DEBUG("Chip id = 0x%x\n", system_get_chip_id()); DHT22_DEBUG("CPU freq = %d MHz\n", system_get_cpu_freq()); DHT22_DEBUG("Flash size map = %s\n", FlashSizeMap[system_get_flash_size_map()]); DHT22_DEBUG("Free heap size = %d\n", system_get_free_heap_size()); DHT22_DEBUG("==== End System info ====\n"); os_delay_us(10000); DHT22_DEBUG("System init...\r\n"); if(wifi_get_opmode() != STATION_MODE) { DHT22_DEBUG("ESP8266 is %s mode, restarting in %s mode...\r\n", WiFiMode[wifi_get_opmode()], WiFiMode[STATION_MODE]); setup_wifi_st_mode(); } if(wifi_get_phy_mode() != PHY_MODE_11N) wifi_set_phy_mode(PHY_MODE_11N); if(wifi_station_get_auto_connect() == 0) wifi_station_set_auto_connect(1); // Wait for Wi-Fi connection os_timer_disarm(&WiFiLinker); os_timer_setfn(&WiFiLinker, (os_timer_func_t *)wifi_check_ip, NULL); os_timer_arm(&WiFiLinker, WIFI_CHECK_DELAY, 0); UDP_Init(); DHT22_DEBUG("System init done.\n"); }
/** * get phy Mode * @return phy_mode_t */ WiFiPhyMode_t ESP8266WiFiGenericClass::getPhyMode() { return (WiFiPhyMode_t) wifi_get_phy_mode(); }
irom void stats_generate(uint16_t size, char *dst) { const struct rst_info *rst_info; struct station_config sc_default, sc_current; uint32_t system_time; system_time = system_get_time(); rst_info = system_get_rst_info(); wifi_station_get_config_default(&sc_default); wifi_station_get_config(&sc_current); snprintf(dst, size, "> firmware version date: %s\n" "> system id: %u\n" "> spi flash id: %u\n" "> cpu frequency: %u\n" "> flash map: %s\n" "> reset cause: %s\n" ">\n" "> heap free: %u bytes\n" "> system clock: %u.%06u s\n" "> uptime: %u %02d:%02d:%02d\n" "> real time: %u %02d:%02d:%02d\n" "> size of config: %u\n" ">\n" "> int uart rx: %u\n" "> int uart tx: %u\n" "> timer_fast fired: %u\n" "> timer_slow fired: %u\n" "> timer_second fired: %u\n" "> background task: %u\n" ">\n" "> default ssid: %s, passwd: %s\n" "> current ssid: %s, passwd: %s\n" "> phy mode: %s\n" "> sleep mode: %s\n" "> channel: %u\n" "> signal strength: %d dB\n", __DATE__ " " __TIME__, system_get_chip_id(), spi_flash_get_id(), system_get_cpu_freq(), flash_map[system_get_flash_size_map()], reset_map[rst_info->reason], system_get_free_heap_size(), system_time / 1000000, system_time % 1000000, ut_days, ut_hours, ut_mins, ut_secs, rt_days, rt_hours, rt_mins, rt_secs, sizeof(config_t), stat_uart_rx_interrupts, stat_uart_tx_interrupts, stat_timer_fast, stat_timer_slow, stat_timer_second, stat_background_task, sc_default.ssid, sc_default.password, sc_current.ssid, sc_current.password, phy[wifi_get_phy_mode()], slp[wifi_get_sleep_type()], wifi_get_channel(), wifi_station_get_rssi()); }
void user_init(void) { uint8_t i; UartDev.data_bits = EIGHT_BITS; UartDev.parity = NONE_BITS; UartDev.stop_bits = ONE_STOP_BIT; uart_init(BIT_RATE_9600, BIT_RATE_9600); i2c_init(); SSD1306Init(); clearScreen(); stringDraw(1, 1, "SDK ver:"); stringDraw(1, 48, (char*)system_get_sdk_version()); ets_uart_printf("reset reason: %d\n", reset_info->reason); ets_uart_printf("Booting...\n"); ets_uart_printf("SDK version:%s\n", system_get_sdk_version()); setup_wifi_st_mode(); if(wifi_get_phy_mode() != PHY_MODE_11N) wifi_set_phy_mode(PHY_MODE_11N); if(wifi_station_get_auto_connect() == 0) wifi_station_set_auto_connect(1); #ifdef CONFIG_DYNAMIC flash_param_t *flash_param; flash_param_init(); flash_param = flash_param_get(); UartDev.data_bits = GETUART_DATABITS(flash_param->uartconf0); UartDev.parity = GETUART_PARITYMODE(flash_param->uartconf0); UartDev.stop_bits = GETUART_STOPBITS(flash_param->uartconf0); uart_init(flash_param->baud, BIT_RATE_115200); #else #endif ets_uart_printf("size flash_param_t %d\n", sizeof(flash_param_t)); #ifdef CONFIG_GPIO config_gpio(); #endif // os_timer_disarm(&timer_1); // os_timer_setfn(&timer_1, (os_timer_func_t *)timer_1_int, NULL); // os_timer_arm(&timer_1, 1000, 1); // Wait for Wi-Fi connection os_timer_disarm(&WiFiLinker); os_timer_setfn(&WiFiLinker, (os_timer_func_t *)wifi_check_ip, NULL); os_timer_arm(&WiFiLinker, 1000, 0); system_os_task(recvTask, recvTaskPrio, recvTaskQueue, recvTaskQueueLen); }
/****************************************************************************** * FunctionName : udp_test_port_recv * Returns : none *******************************************************************************/ LOCAL void ICACHE_FLASH_ATTR udp_test_port_recv(void *arg, struct udp_pcb *upcb, struct pbuf *p, ip_addr_t *addr, u16_t port) { uint8 usrdata[32]; if (p == NULL) return; if(p->tot_len < 2) { pbuf_free(p); return; } uint16 length = mMIN(p->tot_len, sizeof(usrdata)-1); #if DEBUGSOO > 0 os_printf("udp " IPSTR ":%u [%d]\n", IP2STR(addr), port, p->tot_len); #endif length = pbuf_copy_partial(p, usrdata, length, 0); pbuf_free(p); uint8 *pudpbuf = (uint8 *)os_zalloc(udpbufsize+1); if(pudpbuf == NULL) return; uint16 udpbuflen = 0; int x = 0; if(length>2) x = atoi((char *)&usrdata[2]); if ((length>1)&&(usrdata[1]=='?')) switch(usrdata[0]) { case 'M': system_print_meminfo(); case 'A': { udp_puts("\nChip_id: %08x Flash_id: %08x\nsys_time:%08x ADC:%d\n", system_get_chip_id(), spi_flash_get_id(), system_get_time(), system_adc_read()); struct softap_config wiconfig; wifi_softap_get_config(&wiconfig); udp_puts("OPMode:%u SSID:'%s' Pwd:'%s' Ch:%u Authmode:%u MaxCon:%u Phu:%u ACon:%u\n", wifi_get_opmode(), wiconfig.ssid, wiconfig.password, wiconfig.channel, wiconfig.authmode, wiconfig.max_connection, wifi_get_phy_mode(), wifi_station_get_auto_connect()); udp_puts("Connect status:%u\n", wifi_station_get_connect_status()); }; case 'I': udp_puts("heapsize: %d\n", system_get_free_heap_size() + udpbufsize); udpbuflen += print_udp_psc(pudpbuf+udpbuflen, udpbufsize-udpbuflen); udpbuflen += print_tcp_psc(pudpbuf+udpbuflen, udpbufsize-udpbuflen); udpbuflen += chow_tcp_connection_info(pudpbuf+udpbuflen, udpbufsize-udpbuflen); break; case 'H': udp_puts("heapsize: %d\n", system_get_free_heap_size() + udpbufsize); break; case 'U': udp_puts("heapsize: %d\n", system_get_free_heap_size() + udpbufsize); udpbuflen += print_udp_psc(pudpbuf+udpbuflen, udpbufsize-udpbuflen); break; case 'T': udp_puts("heapsize: %d\n", system_get_free_heap_size() + udpbufsize); udpbuflen += print_tcp_psc(pudpbuf+udpbuflen, udpbufsize-udpbuflen); break; #ifdef USE_SRV_WEB_PORT case 'S': udp_puts("heapsize: %d\n", system_get_free_heap_size() + udpbufsize); udpbuflen += chow_tcp_connection_info(pudpbuf+udpbuflen, udpbufsize-udpbuflen); break; #endif case 'R': system_restart(); break; case 'P': udp_puts("system_set_os_print(%u)\n", x); system_set_os_print(x); break; case 'O': udp_puts("wifi_set_opmode(%u):%u\n", x, wifi_set_opmode(x)); break; case 'B': udp_puts("wifi_station_set_auto_connect(%u):%u\n", x, wifi_station_set_auto_connect(x)); break; case 'D': switch(x) { case 0: udp_puts("wifi_station_dhcpc_start:%u\n", wifi_station_dhcpc_start()); break; case 1: udp_puts("wifi_station_dhcpc_stop:%u\n", wifi_station_dhcpc_stop()); break; case 2: udp_puts("wifi_softap_dhcps_start:%u\n",wifi_softap_dhcps_start()); break; case 3: udp_puts("wifi_softap_dhcps_stop:%u\n", wifi_softap_dhcps_stop()); break; default: udp_puts("D(%u)?\n", x); } break; case 'F': if(flashchip != NULL) { udp_puts("FlashID: 0x%08x\nChip size: %d\nBlock size: %d\nSector size: %d\nPage size: %d\nStatus mask: 0x%08x\n", flashchip->deviceId, flashchip->chip_size, flashchip->block_size, flashchip->sector_size, flashchip->page_size, flashchip->status_mask ); udp_puts("Real Flash size: %u\n", spi_flash_real_size()); } else udp_puts("Unknown Flash type!\n"); break; case 'E': udp_puts("wifi_set_sleep_type(%d):%u\n", x, wifi_set_sleep_type(x)); break; case 'G': udp_puts("g_ic = %p\n", &g_ic); break; default: udp_puts("???\n"); } if(udpbuflen) { struct pbuf *z = pbuf_alloc(PBUF_TRANSPORT, udpbuflen, PBUF_RAM); if(z != NULL) { err_t err = pbuf_take(z, pudpbuf, udpbuflen); os_free(pudpbuf); if(err == ERR_OK) { udp_sendto(upcb, z, addr, port); } pbuf_free(z); return; } } os_free(pudpbuf); }
int http_wifi_api_get_info(http_connection *c) { CGI_WIFI_DBG("http_wifi_api_get_info\n"); //wait for whole body if(c->state <HTTPD_STATE_BODY_END) { return HTTPD_CGI_MORE; } api_cgi_status * status = c->cgi.data; if(status==NULL) { //first call, send headers status = (api_cgi_status*)os_malloc(sizeof(api_cgi_status)); status->state=1; c->cgi.data=status; http_SET_HEADER(c,HTTP_CONTENT_TYPE,JSON_CONTENT_TYPE); http_response_OK(c); return HTTPD_CGI_MORE; } else if(status->state==1) { //json data char mac[20]; wifi_station_get_config(&wifi_status.station_config); char *wifistatus = "unknown"; uint8_t c_status = wifi_station_get_connect_status(); if (c_status >= 0 && c_status < sizeof(connStatuses)) wifistatus = connStatuses[c_status]; int p = wifi_get_phy_mode(); char *phy = wifiPhy[p&3]; sint8 rssi = wifi_station_get_rssi(); if (rssi > 0) rssi = 0; uint8_t op = wifi_get_opmode() & 0x3; char *warn = wifiWarn[op]; uint8 mac_addr[6]; wifi_get_macaddr(0, mac_addr); uint8_t chan = wifi_get_channel(); char *hostname = wifi_station_get_hostname(); os_sprintf(mac,"%02x:%02x:%02x:%02x:%02x:%02x", mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]); cJSON *root = cJSON_CreateObject(); cJSON_AddNumberToObject(root,"mode",wifi_get_opmode()); cJSON_AddStringToObject(root,"modechange", MODECHANGE); cJSON_AddStringToObject(root,"ssid", (const char *)wifi_status.station_config.ssid); cJSON_AddStringToObject(root,"status", (const char *)wifistatus); cJSON_AddStringToObject(root,"phy", (const char *)phy); cJSON_AddNumberToObject(root,"rssi", rssi); cJSON_AddStringToObject(root,"warn", (const char *)warn); cJSON_AddStringToObject(root,"mac", (const char *)mac); cJSON_AddNumberToObject(root,"chan", chan); cJSON_AddStringToObject(root,"hostname", (const char *)hostname); cJSON_AddStringToObject(root,"domain", (const char *)INTERFACE_DOMAIN); // got ip if(c_status==5) { struct ip_info ip; wifi_get_ip_info(0x0,&ip); char *ip_str = (char*)ipaddr_ntoa(&ip.ip); cJSON_AddStringToObject(root,"ip",ip_str); } else { cJSON_AddStringToObject(root,"ip",""); } http_write_json(c,root); cJSON_Delete(root); status->state=99; return HTTPD_CGI_MORE; } else { os_free(c->cgi.data); return HTTPD_CGI_DONE; } }