BLEBeaconScan / serial.h /
Yanik Cawidrone Added sources
669f3ab 5 years ago
1 contributor
92 lines | 3.171kb
#ifndef _SERIAL_H
#define _SERIAL_H

#define SCAN_TIME  10 // seconds
#define SCAN_TIME_MIN  2 // seconds
#define WINDOW_TIME_MIN  192 // seconds
#define INTERVAL_TIME_MIN  200 // seconds

uint8_t gScanTime = SCAN_TIME;
uint8_t gNoFilter = true;
uint16_t gWindow = WINDOW_TIME_MIN;
uint16_t gInterval = INTERVAL_TIME_MIN;
char gFilter[18] = "";

#define SERIAL_MAX_LINES 32
void serialHelp() {
  Serial.println("Available commands: ");
  Serial.println("- help: Display this screen");
  Serial.println("- scan XX : Set scan time to XX (default: 10s)");
  Serial.println("- window XX : Set scan window to XX (default: 192)");
  Serial.println("- interval XX : Set scan window to XX (default: 200)");
  Serial.println("- filter none : remove all filters");
  Serial.println("- filter 00:11:22:33:44:55 : filter only on 00:11:22:33:44:55 (works on prefix too)");
}

void serialFilter(char *newFilter) {
  String serialOut = "serialFilter() : ";
  memset(gFilter,0,18);
  strncpy(gFilter,newFilter,strlen(newFilter));
  serialOut += gFilter;
  if( 0 == strcmp(newFilter,"none") ) {
    gNoFilter = true;
  } else {
    gNoFilter = false;
  }
  Serial.println(serialOut);
}

void serialScanTime(uint8_t newTime) {
  String serialOut = "{\"command\": \"scan\", \"status\": { ";
  serialOut += "\"value\": \""+String(newTime)+"\"";
  serialOut += "}";
  gScanTime = newTime;
  Serial.println(serialOut);
}

void serialWindow(uint16_t newTime) {
  String serialOut = "{\"command\": \"window\", \"status\": { ";
  serialOut += "\"value\": \""+String(newTime)+"\"";
  serialOut += "}";
  gWindow = newTime;
  Serial.println(serialOut);
}

void serialInterval(uint16_t newTime) {
  String serialOut = "{\"command\": \"interval\", \"status\": { ";
  serialOut += "\"value\": \""+String(newTime)+"\"";
  serialOut += "}";
  gInterval = newTime;
  Serial.println(serialOut);
}

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 == strncmp(command,"filter",6) ) {
      char *newFilter = (command+7);
      serialFilter(newFilter);
    } else if( 0 == strncmp(command,"scan",4) ) {
      int newTime = atoi((command+5));
      if( newTime < SCAN_TIME_MIN ) newTime = SCAN_TIME_MIN;
      serialScanTime(newTime);
    } else if( 0 == strncmp(command,"window",6) ) {
      uint16_t newTime = atoi(&command[7]);
      if( newTime < WINDOW_TIME_MIN ) newTime = WINDOW_TIME_MIN;
      serialWindow(newTime);
    } else if( 0 == strncmp(command,"interval",8) ) {
      uint16_t newTime = atoi(&command[9]);
      if( newTime < INTERVAL_TIME_MIN ) newTime = INTERVAL_TIME_MIN;
      serialInterval(newTime);
    } else {
      Serial.println("{\"command\": \""+String(command)+"\", \"status\": \"error\" }");
    }
  }
}
#endif //_SERIAL_H