#ifndef _SERIAL_H #define _SERIAL_H #include "beacon.h" #define SERIAL_MAX_LINES 32 void serialHelp() { Serial.println("Available commands: "); Serial.println("- help: Display this screen"); Serial.println("- beacon: Display beacon details"); Serial.println("- type X: Set type of Beacon"); Serial.println("- num aabb: Set the Beacon number in HEX padded to 2bytes"); Serial.println("- reset: Reset the board"); } void serialBeacon() { String serialOut = "{\"command\": \"beacon\", \"status\": { "; serialOut += "\"appName\": \""+String(APPNAME)+"\", "; serialOut += "\"appVersion\": \""+String(APPVER)+"\", "; serialOut += "\"mac\": \""+String(macStr)+"\", "; serialOut += "\"instance\": \""+String(instanceStr)+"\", "; serialOut += "\"count\": \""+String(beacon_count)+"\", "; serialOut += "\"type\": \""+beaconTypeStr+"\""; serialOut += "}"; serialOut += "}"; Serial.println(serialOut); } void serialReset() { Serial.println(""); Serial.println(""); Serial.println(""); Serial.println("{\"command\": \"reset\", \"status\": \"ok\" }"); ESP.restart(); } void serialNum(char *buf) { int len = strlen(buf); char newNum[5]=""; strncpy(newNum,buf+4,4); newNum[4] =0x0; String newNumStr = ""; newNumStr += newNum; Serial.println(newNumStr); uint16_t newNumDW = strtoul(newNum,NULL,16); EEPROM.write(1, (uint8_t)((newNumDW >> 8) & 0xff) ); EEPROM.write(2, (uint8_t)(newNumDW & 0xff) ); EEPROM.commit(); beacon_num[0] = EEPROM.read(1); beacon_num[1] = EEPROM.read(2); String serialOut = "{\"command\": \"num\", \"status\": { "; serialOut += "\"numDec\": \""+String(newNumDW)+"\", "; serialOut += "\"numHex\": \""+String(newNum)+"\""; serialOut += "}"; Serial.println(serialOut); } void serialType(EN_BEACON_TYPE type) { beacon_type = type; switch( type ) { case EN_BEACON_TYPE_entry: beaconTypeStr="Entry "; break; case EN_BEACON_TYPE_hazard: beaconTypeStr="Hazard "; break; case EN_BEACON_TYPE_safe: beaconTypeStr="Safe "; break; case EN_BEACON_TYPE_exit: beaconTypeStr="Exit "; break; case EN_BEACON_TYPE_other: beaconTypeStr="Other "; break; default: beaconTypeStr="Safe "; break; } String serialOut = "{\"command\": \"beacon\", \"status\": { "; serialOut += "\"type\": \""+String(beaconTypeStr)+"\""; serialOut += "}"; Serial.println(serialOut); EEPROM.write(0, beacon_type); EEPROM.commit(); } void pollSerial() { if (Serial.available() > 0) { char command[SERIAL_MAX_LINES]; int sizeCommand = Serial.readBytesUntil('\r', command, sizeof(command) / sizeof(char) ); command[sizeCommand]='\0'; if(command[sizeCommand-1]=='\n') command[sizeCommand-1]='\0'; Serial.println("[CMD] received: "+String(command)); if( 0 == strcmp(command,"help") ) { serialHelp(); } else if( 0 == strcmp(command,"beacon") ) { serialBeacon(); } else if( 0 == strcmp(command,"type 1") ) { serialType(EN_BEACON_TYPE_entry); } else if( 0 == strcmp(command,"type 2") ) { serialType(EN_BEACON_TYPE_exit); } else if( 0 == strcmp(command,"type 3") ) { serialType(EN_BEACON_TYPE_hazard); } else if( 0 == strcmp(command,"type 4") ) { serialType(EN_BEACON_TYPE_safe); } else if( 0 == strcmp(command,"type 5") ) { serialType(EN_BEACON_TYPE_other); } else if( 0 == strncmp(command,"num ",4) ) { serialNum(command); } else if( 0 == strcmp(command,"reset") ) { serialReset(); } else { Serial.println("{\"command\": \""+String(command)+"\", \"status\": \"error\" }"); } } } #endif //_SERIAL_H