void WiFiLib::reinit() { WiFiLib_DEV.begin(WiFiLib_BAUDS); send(F("AT+RST"), 2000); sendPart(F("AT+CWMODE=")); send(String(mode), 100); if (mode != '1') { // Configure AP sendPart(F("AT+CWSAP=\"")); sendPart(ssid); sendPart(F("\",\"")); sendPart(pass); send(F("\",1,0"), 500); // Last param, ench: 0 OPEN; 2 WPA_PSK; 3 WPA2_PSK; 4 WPA_WPA2_PSK } if (mode != '2') { // Configure STA for(char i = 0; i < 5; i++) { sendPart(F("AT+CWJAP=\"")); sendPart(ssid); sendPart(F("\",\"")); sendPart(pass); String res = send(F("\""), 10000); if(res.indexOf("OK") >= 0) { break; } } } send(F("AT+CIPMUX=1"), 200); // configure for multiple connections send(F("AT+CIPSERVER=1,80"), 200); // turn on server on port 80 }
void main() { lcdInit(); spiOn(); spiOff(); sendByte(out); sendArray(array); lcdOn(); lcdOff(); sendBuffer(); sendPart(3, 7, LCD_Buffer); clear(); clearPart(5, 76); clearPartColor(5, 76, clBLACK); setPenColor(clBLACK); setBackColor(clWHITE); delay_nsek(40); scsOn(); scsOff(); i = getValue(LCD_Buffer, 23, 266); setValue(LCD_Buffer, 23, 266, 0x3F); setCharge(); resetCharge(); drawPixel(5, 5, LCD_Buffer); drawVLine(5, 5, 5, LCD_Buffer); drawHLine(5, 5, 5, LCD_Buffer); drawLine(5, 5, 55, 55, LCD_Buffer); drawRect(5, 5, 55, 55, LCD_Buffer); drawFillRect(5, 5, 55, 55, clWHITE, LCD_Buffer); drawCircle(10, 10, 5, LCD_Buffer); }
static int manageEnet(ServerData *data) { ENetEvent event; PacketGeneric *packet; Client *client; assert(data); /* Wait up to 1000 milliseconds for an event. */ while (enet_host_service(data->server, &event, 1000) > 0) { switch (event.type) { case ENET_EVENT_TYPE_CONNECT: printf("A new client connected from %x:%u.\n", event.peer->address.host, event.peer->address.port); /* broadcast join message to others */ sendJoin(data, &event); client = (Client*)event.peer->data; break; case ENET_EVENT_TYPE_RECEIVE: /* discard bad packets */ if (event.packet->dataLength < sizeof(PacketGeneric)) break; printf("A packet of length %u was received on channel %u.\n", event.packet->dataLength, event.channelID); /* handle packet */ client = (Client*)event.peer->data; packet = (PacketGeneric*)event.packet->data; switch (packet->id) { case PACKET_ID_ACTOR_STATE: handleState(data, &event); break; case PACKET_ID_ACTOR_FULL_STATE: handleFullState(data, &event); break; } /* Clean up the packet now that we're done using it. */ enet_packet_destroy(event.packet); break; case ENET_EVENT_TYPE_DISCONNECT: /* broadcast part message to others */ sendPart(data, &event); /* Reset the peer's client information. */ serverFreeClient(data, event.peer->data); event.peer->data = NULL; } } /* send all response packets */ enet_host_flush(data->server); return RETURN_OK; }
void WiFiLib::wifiLoop() { if(WiFiLib_DEV.available()) { char IPDSteps = 0, c; int ipd; String route = ""; long int time = millis() + 500; while (time > millis()) { while (WiFiLib_DEV.available()) { c = WiFiLib_DEV.read(); // read the next character. switch (IPDSteps) { case 0: if (c == '+') { IPDSteps++; } else { IPDSteps = 0; } break; case 1: if (c == 'I') { IPDSteps++; } else { IPDSteps = 0; } break; case 2: if (c == 'P') { IPDSteps++; } else { IPDSteps = 0; } break; case 3: if (c == 'D') { IPDSteps++; } else { IPDSteps = 0; } break; case 4: if (c == ',') { IPDSteps++; ipd = 0; } else { IPDSteps = 0; } break; case 5: // Reading IPD channel if (c == ',') { IPDSteps++; } else { ipd = ipd * 10 + c - 48; } break; case 6: // Length, ignored if (c == ':') { IPDSteps++; } break; case 7: // GET, post, etc if (c == ' ') { IPDSteps++; } break; case 8: // Route if (c == ' ') { IPDSteps++; } else { route += c; } break; case 9: // Ignore, request completed break; default: IPDSteps = 0; } } } if (IPDSteps == 9) { // Request fond, check routes IPDStruct * last = IPDs; bool found = false; char *tmpstr = NULL; while (last != NULL) { tmpstr = NULL; if (last->mode == 4) {// 4 Default route found = true; } else if (strlen(last->route) <= route.length()) { switch (last->mode) { case 3:// 3 found in any position found = route.indexOf(*last->route) >= 0; break; case 2:// 2 ends with found = route.endsWith(last->route); break; case 1:// 1 starts with found = route.startsWith(last->route); break; case 0:// 0 same string default: found = route.equals(last->route); break; } if (tmpstr != NULL) { free(tmpstr); } } if (found) { last->fp(route, ipd); sendPart(F("AT+CIPCLOSE=")); send(String(ipd, DEC), 100); return; } last = (IPDStruct *) last->next; } sendDataByIPD(ipd, F("404 - Not found")); send(String(ipd, DEC), 100); last->fp(route, ipd); sendPart(F("AT+CIPCLOSE=")); send(String(ipd, DEC), 100); } } }
// Used for setting-up Wifi Module to desired speed. // Remember to change Arduino sketch speed when changing to adapt to new one. void WiFiLib::setBaudRate(const String br) { sendPart(F("AT+CIOBAUD=")); send(br, 200); }
void WiFiLib::_sendDataByIPD_common(const int ipd) { sendPart(F("AT+CIPSEND=")); sendPart(ipd); sendPart(F(",")); }