Deals with user inputs
Diff: serial_terminal.cpp
- Revision:
- 26:d06a55487056
- Parent:
- 25:71b6c52169b0
- Child:
- 27:f665c1bc9dbb
--- a/serial_terminal.cpp Fri Dec 28 10:04:24 2018 +0000 +++ b/serial_terminal.cpp Fri Dec 28 12:05:28 2018 +0000 @@ -9,174 +9,195 @@ void serialterm() { - serial_tout.attach(serial_toutISR,TOUT_TIME); + serial_tout.attach(serial_toutISR,TOUT_TIME_DEF); static time_t seconds; //change these sizes char cmnd[30]; char arg[30]; - float val; + float val; + int argnum; e_commands e_cmnd; e_commands e_arg; - - pc->printf("\nCommand buffer:%s\n\r",cmdBuffer); + + argnum = sscanf(cmdBuffer,"%s %s",cmnd, arg); - sscanf(cmdBuffer,"%s %s",cmnd, arg); - int argnum = sscanf(arg, "%f", &val); //returns 0 if no number present - - e_cmnd = stringconv(cmnd); - e_arg = stringconv(arg); - - if(logging) + if(argnum != 2) { printlock.lock(); - pc->printf("Command %s recieved with argument of %s, containing %d readable numbers\r\n\n",cmnd,arg,argnum); - printlock.unlock(); + pc->printf("INVALID COMMAND\r\n"); + printlock.unlock(); } - - switch (e_cmnd) + else { + argnum = sscanf(arg, "%f", &val); //returns 0 if no number present + + e_cmnd = stringconv(cmnd); + e_arg = stringconv(arg); - case (READ) : - if ((argnum == 0 && e_arg != ALL) || (argnum == 1 && val < 1)) {printlock.lock(); pc->printf("INVALID COMMAND\n\n\r"); printlock.unlock(); break;} - else if (e_arg == ALL || val >= (BUFFERSIZE-Nspaces)) - { - SDqueue.call(SDread,-1); //read all - } - else - { - SDqueue.call(SDread,val); - } - break; - - case (DELETE) : - if ((argnum == 0 && e_arg != ALL) || (argnum == 1 && val < 1)) {printlock.lock(); pc->printf("INVALID COMMAND\n\n\r"); printlock.unlock(); break;} - if (e_arg == ALL || val > (BUFFERSIZE-Nspaces)) SDqueue.call(SDdelete,-1); //delete all - else SDqueue.call(SDdelete,val); - break; + if(logging) + { + printlock.lock(); + pc->printf("Command %s recieved with argument of %s, containing %d readable numbers\r\n\n",cmnd,arg,argnum); + printlock.unlock(); + } + + switch (e_cmnd) + { - case (SETDATE) : - timeLock.lock(); - seconds = time(NULL); - timeData = localtime(&seconds); - //localtime_r(&seconds, timeData); - set_time(mktime(timeData)); - sscanf(arg,"%2d%2d%4d",&(timeData->tm_mday),&(timeData->tm_mon),&(timeData->tm_year)); - (timeData->tm_mon) = (timeData->tm_mon)-1; - (timeData->tm_year) = (timeData->tm_year)-1900; - timeLock.unlock(); - if (mktime(timeData) == -1) - { - printlock.lock(); - pc->printf("SETDATE failed\n\n\r"); - printlock.unlock(); - } - else - { + case (READ) : + if ((argnum == 0 && e_arg != ALL) || (argnum == 1 && val < 1)) {printlock.lock(); pc->printf("INVALID COMMAND\n\n\r"); printlock.unlock(); break;} + else if (e_arg == ALL || val >= (BUFFERSIZE-Nspaces)) + { + SDqueue.call(SDread,-1); //read all + } + else + { + SDqueue.call(SDread,val); + } + break; + + case (DELETE) : + if ((argnum == 0 && e_arg != ALL) || (argnum == 1 && val < 1)) {printlock.lock(); pc->printf("INVALID COMMAND\n\n\r"); printlock.unlock(); break;} + if (e_arg == ALL || val > (BUFFERSIZE-Nspaces)) SDqueue.call(SDdelete,-1); //delete all + else SDqueue.call(SDdelete,val); + break; + + case (SETDATE) : timeLock.lock(); - set_time(mktime(timeData)); - timeLock.unlock(); seconds = time(NULL); - printlock.lock(); - pc->printf("Date updated to %s\n\n\r", ctime(&seconds)); - printlock.unlock(); - } - break; - - case (SETTIME) : - //Get current time and update the tm structure - timeLock.lock(); - seconds = time(NULL); - timeData = localtime(&seconds); - set_time(mktime(timeData)); - //scan the input for hhmmss - sscanf(arg,"%2d%2d%2d",&(timeData->tm_hour),&(timeData->tm_min),&(timeData->tm_sec)); - //check if the time is valid, if not do not update time - timeLock.unlock(); - if (mktime(timeData) == -1) - { - printlock.lock(); - pc->printf("SETTIME FAILED\n\n\r"); - printlock.unlock(); - } - else - { - timeLock.lock(); + timeData = localtime(&seconds); + //localtime_r(&seconds, timeData); set_time(mktime(timeData)); + sscanf(arg,"%2d%2d%4d",&(timeData->tm_mday),&(timeData->tm_mon),&(timeData->tm_year)); + (timeData->tm_mon) = (timeData->tm_mon)-1; + (timeData->tm_year) = (timeData->tm_year)-1900; + timeLock.unlock(); + if (mktime(timeData) == -1) + { + printlock.lock(); + pc->printf("SETDATE failed\n\n\r"); + printlock.unlock(); + } + else + { + timeLock.lock(); + set_time(mktime(timeData)); + timeLock.unlock(); + seconds = time(NULL); + printlock.lock(); + pc->printf("Date updated to %s\n\n\r", ctime(&seconds)); + printlock.unlock(); + } + break; + + case (SETTIME) : + //Get current time and update the tm structure + timeLock.lock(); seconds = time(NULL); + timeData = localtime(&seconds); + set_time(mktime(timeData)); + //scan the input for hhmmss + sscanf(arg,"%2d%2d%2d",&(timeData->tm_hour),&(timeData->tm_min),&(timeData->tm_sec)); + //check if the time is valid, if not do not update time timeLock.unlock(); + if (mktime(timeData) == -1) + { + printlock.lock(); + pc->printf("SETTIME FAILED\n\n\r"); + printlock.unlock(); + } + else + { + timeLock.lock(); + set_time(mktime(timeData)); + seconds = time(NULL); + timeLock.unlock(); + printlock.lock(); + pc->printf("TIME UPDATED TO %s\n\n\r", ctime(&seconds)); + printlock.unlock(); + } + break; + + case (SETT) : + //Set the sampling rate + if (e_arg == ALL || val < 0.1 || val > 60) {printlock.lock(); pc->printf("OUT OF RANGE\n\n\r"); printlock.unlock(); break;} + else + { + sample_rate = val; + if(sampling) + { + sample.attach(&sampleISR, sample_rate); + } + printlock.lock(); + pc->printf("Sample rate set to %5.2f\n\n\r", sample_rate); + printlock.unlock();} + break; + + case (STATE) : + if (e_arg == ON) + { + sample.attach(&sampleISR, sample_rate); + sampling = true; + printlock.lock(); + pc->printf("Sampling ON\n\n\r"); + printlock.unlock(); + break; + } + else if (e_arg == OFF) + { + //sample.attach(NULL, sample_rate); + sample.detach(); + sampling = false; + printlock.lock(); + pc->printf("Sampling OFF\n\n\r"); + printlock.unlock(); + break; + } + else + { + printlock.lock(); + pc->printf("Invalid command\n\n\r"); + printlock.unlock(); + break; + } + + + case (LOGGING) : + if (e_arg == ON) + { + logging = true; + printlock.lock(); + pc->printf("LOGGING ON\n\n\r"); + printlock.unlock(); + break; + } + else if (e_arg == OFF) + { + logging = false; + printlock.lock(); + pc->printf("LOGGING OFF\n\n\r"); + printlock.unlock(); + break; + } + else + { + printlock.lock(); + pc->printf("INVALID COMMAND\n\n\r"); + printlock.unlock(); + break; + } + break; + + default : printlock.lock(); - pc->printf("TIME UPDATED TO %s\n\n\r", ctime(&seconds)); - printlock.unlock(); - } - break; - - case (SETT) : - //Set the sampling rate - if (e_arg == ALL || val < 0.1 || val > 60) {printlock.lock(); pc->printf("OUT OF RANGE\n\n\r"); printlock.unlock(); break;} - else {sample_rate = val; sample.attach(&sampleISR, sample_rate); printlock.lock(); pc->printf("Sample rate set to %5.2f\n\n\r", val); printlock.unlock();} - break; - - case (STATE) : - if (e_arg == ON) - { - sample.attach(&sampleISR, sample_rate); - printlock.lock(); - pc->printf("Sampling ON\n\n\r"); - printlock.unlock(); - break; - } - else if (e_arg == OFF) - { - sample.attach(NULL, sample_rate); - printlock.lock(); - pc->printf("Sampling OFF\n\n\r"); - printlock.unlock(); - break; - } - else - { - printlock.lock(); - pc->printf("Invalid command\n\n\r"); + pc->printf("INVALID COMMAND\n\n\r"); printlock.unlock(); - break; - } - - - case (LOGGING) : - if (e_arg == ON) - { - logging = true; - printlock.lock(); - pc->printf("LOGGING ON\n\n\r"); - printlock.unlock(); - break; - } - else if (e_arg == OFF) - { - logging = false; - printlock.lock(); - pc->printf("LOGGING OFF\n\n\r"); - printlock.unlock(); - break; - } - else - { - printlock.lock(); - pc->printf("INVALID COMMAND\n\n\r"); - printlock.unlock(); - break; - } - break; - - default : - printlock.lock(); - pc->printf("INVALID COMMAND\n\n\r"); - printlock.unlock(); - break; - } + break; + } + } serial_tout.detach(); memset(cmdBuffer,0,sizeof cmdBuffer); }