From 72df3d8292c5c0c5713c88ded50b12b2226c56d9 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Tue, 6 Mar 2012 04:32:57 +0000 Subject: add reboot function --- kernel/ctrl.c | 29 +++++++++++++++++++++-------- kernel/dmx.c | 1 + kernel/dmx/Makefile | 2 +- kernel/kernel.c | 7 +++++++ kernel/kernel.h | 2 ++ kernel/rgb.c | 4 ++-- kernel/tasks.h | 1 + 7 files changed, 35 insertions(+), 11 deletions(-) diff --git a/kernel/ctrl.c b/kernel/ctrl.c index 1f802db..3d26f07 100644 --- a/kernel/ctrl.c +++ b/kernel/ctrl.c @@ -24,15 +24,28 @@ void ctrl(void *arg) { - struct ctrlarg *a = arg; + int c; for (;;) { - sprintf(a->lcd->first, "%8lx", now()); - sprintf(a->lcd->second, "%4d:%.2d:%.2d:%.2d", - a->clock->d, - a->clock->h, - a->clock->m, - a->clock->s); - sleep(MSEC(500)); + c = fgetc(stdin); + + switch (c) { + case '-': + reboot(); + break; + case 'n': + fprintf(stdout, "\r%ld\n", now()); + break; + case 'r': + fprintf(stdout, "\r%d\n", rqlen()); + break; + case 't': + fprintf(stdout, "\r%d\n", running()); + break; + default: + break; + } + + yield(); } } diff --git a/kernel/dmx.c b/kernel/dmx.c index 64389ec..cf870af 100644 --- a/kernel/dmx.c +++ b/kernel/dmx.c @@ -48,6 +48,7 @@ main() exec(adc, &adcarg, 96); exec(clock, NULL, 96); #if 0 + exec(ctrl, NULL, 96); exec(cmd, &rgbargs, 48); exec(ppm, &ppmarg, 48); #endif diff --git a/kernel/dmx/Makefile b/kernel/dmx/Makefile index 9bcdfec..deb7b98 100644 --- a/kernel/dmx/Makefile +++ b/kernel/dmx/Makefile @@ -16,7 +16,7 @@ BAUD= 9600 PROG= dmx SRCS= dmx.c heartbeat.c rgb.c hsv.c clock.c lcd3.c uart.c adc.c -# ppm.c +# ppm.c ctrl.c NOMAN= .include diff --git a/kernel/kernel.c b/kernel/kernel.c index d35fa3e..185e0ad 100644 --- a/kernel/kernel.c +++ b/kernel/kernel.c @@ -23,6 +23,7 @@ #include #include #include +#include #include "kernel.h" #include "stack.h" #include "queue.h" @@ -298,3 +299,9 @@ semaphore(void) { return kernel.semaphore; } + +void +reboot(void) +{ + wdt_enable(WDTO_15MS); +} diff --git a/kernel/kernel.h b/kernel/kernel.h index 9ad3b5d..1789b36 100644 --- a/kernel/kernel.h +++ b/kernel/kernel.h @@ -98,6 +98,8 @@ uint8_t running(void); uint8_t rqlen(void); uint8_t semaphore(void); +void reboot(void); + /* __END_DECLS */ #endif diff --git a/kernel/rgb.c b/kernel/rgb.c index 00c2ff6..ac68429 100644 --- a/kernel/rgb.c +++ b/kernel/rgb.c @@ -63,13 +63,13 @@ pwm(void *arg) /* on */ if (t) { PORTB |= _BV(a->pin); - sleep(0, t * 40L); + sleep(0, t * 80L); } /* off */ if ((t = UINT8_MAX - t)) { PORTB &= ~_BV(a->pin); - sleep(0, t * 40L); + sleep(0, t * 80L); } } } diff --git a/kernel/tasks.h b/kernel/tasks.h index 6805fea..4c52090 100644 --- a/kernel/tasks.h +++ b/kernel/tasks.h @@ -80,5 +80,6 @@ void adc(void *); void ppm(void *); void cmd(void *); void clock(void *); +void ctrl(void *); #endif -- cgit v1.2.3