aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2012-03-06 04:32:57 +0000
committerDimitri Sokolyuk <demon@dim13.org>2012-03-06 04:32:57 +0000
commit72df3d8292c5c0c5713c88ded50b12b2226c56d9 (patch)
tree4b10031e8a76f51b3a8ff25a5e8fbb545affff4f
parent17fa9164ec9b3e12e01c47ff7bcf3f35487fc407 (diff)
add reboot function
-rw-r--r--kernel/ctrl.c29
-rw-r--r--kernel/dmx.c1
-rw-r--r--kernel/dmx/Makefile2
-rw-r--r--kernel/kernel.c7
-rw-r--r--kernel/kernel.h2
-rw-r--r--kernel/rgb.c4
-rw-r--r--kernel/tasks.h1
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 <bsd.prog.mk>
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 <string.h>
#include <avr/io.h>
#include <avr/interrupt.h>
+#include <avr/wdt.h>
#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