extern "C" void __yield() { if (cont_can_yield(&g_cont)) { esp_schedule(); esp_yield(); } else { panic(); } }
void delay(unsigned long ms) { if(ms) { os_timer_setfn(&delay_timer, (os_timer_func_t*) &delay_end, 0); os_timer_arm(&delay_timer, ms, ONCE); } else { esp_schedule(); } esp_yield(); if(ms) { os_timer_disarm(&delay_timer); } }
//void __yield() void yield() { if (cont_can_yield(&g_cont)) { esp_schedule(); esp_yield(); } else { abort(); } }
int ESP8266WiFiClass::hostByName(const char* aHostname, IPAddress& aResult) { ip_addr_t addr; aResult = static_cast<uint32_t>(0); err_t err = dns_gethostbyname(aHostname, &addr, &wifi_dns_found_callback, &aResult); if (err == ERR_OK) { aResult = addr.addr; } else if (err == ERR_INPROGRESS) { esp_yield(); // will return here when dns_found_callback fires } return (aResult != 0) ? 1 : 0; }
int8_t ESP8266WiFiClass::scanNetworks(bool async) { if(ESP8266WiFiClass::_scanStarted) { return WIFI_SCAN_RUNNING; } ESP8266WiFiClass::_scanAsync = async; if(_useApMode) { // turn on AP+STA mode mode(WIFI_AP_STA); } else { // turn on STA mode mode(WIFI_STA); } int status = wifi_station_get_connect_status(); if (status != STATION_GOT_IP && status != STATION_IDLE) { disconnect(); } scanDelete(); struct scan_config config; config.ssid = 0; config.bssid = 0; config.channel = 0; config.show_hidden = 0; if(wifi_station_scan(&config, reinterpret_cast<scan_done_cb_t>(&ESP8266WiFiClass::_scanDone))) { ESP8266WiFiClass::_scanComplete = false; ESP8266WiFiClass::_scanStarted = true; if(ESP8266WiFiClass::_scanAsync) { delay(0); // time for the OS to trigger the scan return WIFI_SCAN_RUNNING; } esp_yield(); return ESP8266WiFiClass::_scanCount; } else { return WIFI_SCAN_FAILD; } }
bool ESP8266WiFiClass::beginWPSConfig(void) { _useClientMode = true; if(_useApMode) { // turn on AP+STA mode mode(WIFI_AP_STA); } else { // turn on STA mode mode(WIFI_STA); } disconnect(); DEBUGV("wps begin\n"); if(!wifi_wps_disable()) { DEBUGV("wps disable faild\n"); return false; } // so far only WPS_TYPE_PBC is supported (SDK 1.2.0) if(!wifi_wps_enable(WPS_TYPE_PBC)) { DEBUGV("wps enable faild\n"); return false; } if(!wifi_set_wps_cb(&wifi_wps_status_cb)) { DEBUGV("wps cb faild\n"); return false; } if(!wifi_wps_start()) { DEBUGV("wps start faild\n"); return false; } esp_yield(); // will return here when wifi_wps_status_cb fires return true; }
int ICACHE_FLASH_ATTR WiFiClient::connect(IPAddress ip, uint16_t port) { if (_client) stop(); tcp_pcb* pcb = tcp_new(); if (!pcb) return 0; ip_addr_t addr; addr.addr = ip; tcp_arg(pcb, this); tcp_err(pcb, &WiFiClient::_s_err); tcp_connect(pcb, &addr, port, reinterpret_cast<tcp_connected_fn>(&WiFiClient::_s_connected)); esp_yield(); if (_client) return 1; // if tcp_error was called, pcb has already been destroyed. // tcp_abort(pcb); return 0; }
int WiFiClient::connect(IPAddress ip, uint16_t port) { ip_addr_t addr; addr.addr = ip; if (_client) stop(); // if the default interface is down, tcp_connect exits early without // ever calling tcp_err // http://lists.gnu.org/archive/html/lwip-devel/2010-05/msg00001.html netif* interface = ip_route(&addr); if (!interface) { DEBUGV("no route to host\r\n"); return 0; } tcp_pcb* pcb = tcp_new(); if (!pcb) return 0; if (_localPort > 0) { pcb->local_port = _localPort++; } tcp_arg(pcb, this); tcp_err(pcb, &WiFiClient::_s_err); tcp_connect(pcb, &addr, port, reinterpret_cast<tcp_connected_fn>(&WiFiClient::_s_connected)); esp_yield(); if (_client) return 1; // if tcp_error was called, pcb has already been destroyed. // tcp_abort(pcb); return 0; }
/** * WPS config * so far only WPS_TYPE_PBC is supported (SDK 1.2.0) * @return ok */ bool ESP8266WiFiSTAClass::beginWPSConfig(void) { if(!WiFi.enableSTA(true)) { // enable STA failed return false; } disconnect(); DEBUGV("wps begin\n"); if(!wifi_wps_disable()) { DEBUGV("wps disable failed\n"); return false; } // so far only WPS_TYPE_PBC is supported (SDK 1.2.0) if(!wifi_wps_enable(WPS_TYPE_PBC)) { DEBUGV("wps enable failed\n"); return false; } if(!wifi_set_wps_cb((wps_st_cb_t) &wifi_wps_status_cb)) { DEBUGV("wps cb failed\n"); return false; } if(!wifi_wps_start()) { DEBUGV("wps start failed\n"); return false; } esp_yield(); // will return here when wifi_wps_status_cb fires return true; }