bool EspDrv::wifiConnect(char* ssid, const char *passphrase) { LOGDEBUG(F("> wifiConnect")); // TODO // Escape character syntax is needed if "SSID" or "password" contains // any special characters (',', '"' and '/') // connect to access point int ret = sendCmd(F("AT+CWJAP_CUR=\"%s\",\"%s\""), 20000, ssid, passphrase); if (ret==TAG_OK) { LOGINFO1(F("Connected to"), ssid); return true; } LOGWARN1(F("Failed to connected to"), ssid); // clean additional messages logged after the FAIL tag delay(1000); espEmptyBuf(false); return false; }
void EspDrv::wifiDriverInit(Stream *espSerial) { LOGDEBUG(F("> wifiDriverInit")); EspDrv::espSerial = espSerial; if (sendCmd(F("AT")) != TAG_OK) { LOGERROR(F("Cannot initialize ESP module")); delay(8000); return; } reset(); // check firmware version getFwVersion(); // prints a warning message if the firmware is not 1.X if (fwVersion[0] != '1' or fwVersion[1] != '.') { LOGWARN1(F("Warning: Unsupported firmware"), fwVersion); delay(4000); } else { LOGINFO1(F("Initilization successful -"), fwVersion); } }
bool EspDrv::wifiStartAP(char* ssid, const char* pwd, uint8_t channel, uint8_t enc) { LOGDEBUG(F("> wifiStartAP")); // set AP mode, use CUR mode to avoid starting the AP at reboot if (sendCmd(F("AT+CWMODE_CUR=2"))!=TAG_OK) { LOGWARN1(F("Failed to set AP mode"), ssid); return false; } // TODO // Escape character syntax is needed if "SSID" or "password" contains // any special characters (',', '"' and '/') // start access point int ret = sendCmd(F("AT+CWSAP_CUR=\"%s\",\"%s\",%d,%d"), 10000, ssid, pwd, channel, enc); if (ret!=TAG_OK) { LOGWARN1(F("Failed to start AP"), ssid); return false; } // enable DHCP for AP mode sendCmd(F("AT+CWDHCP_CUR=0,1")); LOGINFO1(F("Access point started"), ssid); return true; }
int firestep_init(){ if (fdrTinyG >= 0) { return 0; // already started } const char * path = "/dev/ttyUSB0"; char cmdbuf[CMDMAX+1]; int rc; sprintf(cmdbuf, "stty 115200 -F %s", path); rc = callSystem(cmdbuf); if (rc) { return rc; } sprintf(cmdbuf, "stty 1400:4:1cb2:a00:3:1c:7f:15:4:1:1:0:11:13:1a:0:12:f:17:16:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0 -F %s", path); rc = callSystem(cmdbuf); if (rc) { return rc; } fdwTinyG = fdrTinyG = open(path, O_RDWR | O_ASYNC | O_NONBLOCK); if (fdrTinyG < 0) { rc = errno; LOGERROR2("Cannot open %s (errno %d)", path, rc); return rc; } LOGINFO1("firestep_init %s (open for write) ", path); LOGRC(rc, "pthread_create(firestep_reader) -> ", pthread_create(&tidReader, NULL, &firestep_reader, NULL)); //firestep_config(); return rc; }
void WiFiEspClient::stop() { if (_sock == 255) return; LOGINFO1(F("Disconnecting "), _sock); EspDrv::stopClient(_sock); WiFiEspClass::_state[_sock] = NA_STATE; _sock = 255; }
void EspDrv::config(uint32_t local_ip) { LOGDEBUG(F("> config")); // TODO Not tested yet // disable DHCP sendCmd(F("AT+CWDHCP_DEF=0,0")); int ret = sendCmd(F("AT+CIPSTA_CUR=\"%s\""), 5000, local_ip); if (ret==TAG_OK) { LOGINFO1(F("IP address"), local_ip); } }
int WiFiEspClient::connect(const char* host, uint16_t port) { LOGINFO1(F("Connecting to"), host); _sock = getFirstSocket(); if (_sock != NO_SOCKET_AVAIL) { if (!EspDrv::startClient(host, port, _sock)) return 0; WiFiEspClass::_state[_sock] = _sock; } else { Serial.println(F("No socket available")); return 0; } return 1; }
void EspDrv::config(IPAddress ip) { LOGDEBUG(F("> config")); // disable station DHCP sendCmd(F("AT+CWDHCP_CUR=1,0")); // it seems we need to wait here... delay(500); char buf[16]; sprintf(buf, "%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]); int ret = sendCmd(F("AT+CIPSTA_CUR=\"%s\""), 2000, buf); delay(500); if (ret==TAG_OK) { LOGINFO1(F("IP address set"), buf); } }
static int callSystem(char *cmdbuf) { int rc = 0; rc = system(cmdbuf); if (rc == -1) { LOGERROR2("callSystem(%s) -> %d", cmdbuf, rc); return rc; } if (WIFEXITED(rc)) { if (WEXITSTATUS(rc)) { LOGERROR2("callSystem(%s) -> EXIT %d", cmdbuf, WEXITSTATUS(rc)); return rc; } } else if (WIFSTOPPED(rc)) { LOGERROR2("callSystem(%s) -> STOPPED %d", cmdbuf, WSTOPSIG(rc)); return rc; } else if (WIFSIGNALED(rc)) { LOGERROR2("callSystem(%s) -> SIGNALED %d", cmdbuf, WTERMSIG(rc)); return rc; } LOGINFO1("callSystem(%s)", cmdbuf); return 0; }