X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;f=client%2Fclient.c;h=da74940d07aaa7457dfbc172af80da9511a350f4;hb=HEAD;hp=ce1d1f2164a805ccc9bbb97739bf93e2581379c5;hpb=f10c8c6d2c5c461eadac5ffedab68730fb753461;p=mTask.git diff --git a/client/client.c b/client/client.c index ce1d1f2..da74940 100644 --- a/client/client.c +++ b/client/client.c @@ -12,6 +12,7 @@ #include "sds.h" #include "spec.h" #include "task.h" +#include "mem.h" #include "interface.h" #define MSG_GET_TASK 't' @@ -20,116 +21,118 @@ #define MSG_SDS_DEL 'a' #define MSG_SDS_UPD 'u' #define MSG_SPEC 'c' +#define MSG_SHUTDOWN 'h' #define LOOPDELAY 100 void read_message(void) { - //Find next task - if(input_available()){ - uint8_t c = read_byte(); - debug("Receiving input: %c %02x\n", c, c); - switch(c){ - case MSG_SDS_SPEC: - debug("Receiving an sds"); - sds_register(); - break; - case MSG_SDS_UPD: - debug("Receiving an sds update"); - //TODO do something with the return value - sds_update(); - break; - case MSG_SDS_DEL: - debug("Receiving a delete SDS request"); - sds_delete(); - break; - case MSG_DEL_TASK: - debug("Receiving a delete task request"); - c = read16(); - task_delete(c); - //Write acknowledgement - write_byte('d'); - write16(c); - write_byte('\n'); - break; - case MSG_GET_TASK: - debug("Receiving a task"); - task_register(); - break; - case MSG_SPEC: - debug("Receiving a spec request"); - spec_send(); - break; - case '\0': - debug("Server closed connection"); - break; - case '\n': - break; - default: - debug("Unknown message: %X", c); - } - } else { -// debug("No input"); - } + //Find next task + if (input_available()) { + uint8_t c = read_byte(); + debug("Receiving input: %c %02x\n", c, c); + switch (c) { + case MSG_SDS_SPEC: + debug("Receiving an sds"); + sds_register(); + break; + case MSG_SDS_UPD: + debug("Receiving an sds update"); + //TODO do something with the return value + c = read16(); + sds_update(c); + break; + case MSG_SDS_DEL: + debug("Receiving a delete SDS request"); + c = read16(); + sds_delete(c); + write_byte('a'); + write16(c); + write_byte('\n'); + break; + case MSG_DEL_TASK: + debug("Receiving a delete task request"); + c = read16(); + task_delete(c); + break; + case MSG_GET_TASK: + debug("Receiving a task"); + task_register(); + break; + case MSG_SPEC: + debug("Receiving a spec request"); + spec_send(); + break; + case MSG_SHUTDOWN: + debug("Shutdown received"); + mem_reset(); + reset(); + break; + case '\0': + debug("Server closed connection"); + break; + case '\n': + break; + default: + debug("Unknown message: %X", c); + } + } else { + // debug("No input"); + } } unsigned long loopmillis = 0; void loop(void) { -#ifdef ARDUINO_ESP8266_NODEMCU - if(getmillis()-loopmillis < LOOPDELAY){ - return; - } - loopmillis = getmillis(); +#if defined ARDUINO_ESP8266_NODEMCU || defined ARDUINO_AVR_UNO + if (getmillis() - loopmillis < LOOPDELAY) { + return; + } + loopmillis = getmillis(); #endif - debug("Loop"); + read_message(); - read_message(); + //Run tasks + unsigned long cyclestart = getmillis(); + for (struct task *t = task_head(); t != NULL; t = task_next(t)) { + //interrupt task + if (is_interrupt_task(t) && had_interrupt(t)) { + debug("Interrupt task %d not implemented", t->taskid); + run_task(t); + //Interval task, and interval passed + } else if (cyclestart - t->lastrun > t->interval) { + debug("Running interval task: %d", t->taskid); + run_task(t); - //Run tasks - unsigned long cyclestart = getmillis(); - for(struct task *t = task_head(); t != NULL; t = task_next(t)){ - //interrupt task - if(is_interrupt_task(t) && had_interrupt(t)){ - debug("Interrupt task %d not implemented", t->taskid); - run_task(t); - //Interval task, and interval passed - } else if(cyclestart-t->lastrun > t->interval){ - debug("Running interval task: %d", t->taskid); - run_task(t); - - //Oneshot task, thus disable - if(t->interval == 0){ - task_delete(t->taskid); - } - t->lastrun = cyclestart; - } - } + //Oneshot task, thus disable + if (t->interval == 0) { + task_delete(t->taskid); + } + t->lastrun = cyclestart; + } + } } #ifdef STM -int main(void){ -#elif defined ARDUINO_ESP8266_NODEMCU -void setup(){ +int main(void) { +#elif defined ARDUINO_ESP8266_NODEMCU || defined ARDUINO_AVR_UNO +void setup() { #elif defined LINUX -int main(int argc, char *argv[]){ - gargc = argc; - gargv = argv; +int main(int argc, char *argv[]) { + gargc = argc; + gargv = argv; #endif - //Initialize systems - real_setup(); - sds_init(); - task_init(); - debug("sending device spec"); + //Initialize device independant functionality + real_setup(); -#ifndef ARDUINO_ESP8266_NODEMCU - while(true){ - //Check for newtasks - loop(); - msdelay(LOOPDELAY); - } +#if !defined(ARDUINO_ESP8266_NODEMCU) && !defined(ARDUINO_AVR_UNO) + while (true) { + //Check for newtasks + loop(); + msdelay(LOOPDELAY); + } - return 0; + return 0; #endif }