build C support for interrupts
[mTask.git] / client / task.c
index 4ac8ce5..dfdb71b 100644 (file)
@@ -16,9 +16,10 @@ void task_init(void)
        memset(&tasks, 0, sizeof(struct task)*MAXTASKS);
 }
 
-int task_register(void)
+void task_register(void)
 {
        uint8_t ct;
+       uint16_t i;
 
        for(ct = 0; ct<MAXTASKS; ct++)
                if(!tasks[ct].used)
@@ -29,6 +30,12 @@ int task_register(void)
        memset(&tasks[ct], 0, sizeof(struct task));
        //Read interval
        tasks[ct].interval = read16();
+
+       //Interrupt task
+       if(is_interrupt_task(&tasks[ct])) {
+
+       }
+
        //Read tasklength
        tasks[ct].tlen = read16();
        debug("task interval: %d, length: %d\n",
@@ -37,7 +44,7 @@ int task_register(void)
        if(tasks[ct].tlen > MAXTASKSIZE)
                die("Task is too long: %d", tasks[ct].tlen);
        //Read task bytecode
-       for(unsigned int i = 0; i<tasks[ct].tlen; i++){
+       for(i = 0; i<tasks[ct].tlen; i++){
                tasks[ct].bc[i] = read_byte();
 //             debug("t[][%i]: 0x%02x %d", i,
 //                     tasks[ct].bc[i], tasks[ct].bc[i]);
@@ -47,12 +54,30 @@ int task_register(void)
        tasks[ct].used = true;
        tasks[ct].lastrun = 0L;
 
-       return ct;
+       write_byte('t');
+       write16(ct);
+       write_byte('\n');
+}
+
+bool is_interrupt_task(struct task *t)
+{
+       return t->interval & (2 <<14);
+}
+
+bool had_interrupt(struct task* t)
+{
+       //Not implemented yet...
+       return false;
+       (void)t;
 }
 
 void task_delete(void)
 {
-       tasks[read_byte()].used = false;
+       uint8_t c = read16();
+       tasks[c].used = false;
+       write_byte('d');
+       write16(c);
+       write_byte('\n');
 }
 
 struct task *task_get(int num)