OSDN Git Service

Step 10 added.
[kozos-expbrd/kozos_expbrd.git] / firm / 10 / os / driver / driver_led.c
1 #include "driver_led.h"
2 #include "led.h"
3 #include "kozos.h"
4
5 #define LEDDRV_CMD_LED_ON       'o' /* LED\e$B$NE@Et\e(B */
6 #define LEDDRV_CMD_LED_OFF      'x' /* LED\e$B$N>CEt\e(B */
7 #define LEDDRV_CMD_LED_TOGGLE   't' /* LED\e$B$N%H%0%k\e(B */
8
9 void leddrv_write(int target, int state)
10 {
11   char *p;
12   p = kz_kmalloc(2);
13   p[0] = state ? LEDDRV_CMD_LED_ON : LEDDRV_CMD_LED_OFF;
14   p[1] = '0' + target;
15   kz_send(MSGBOX_ID_LEDDRIVE, 2, p);
16 }
17
18 void leddrv_toggle(int target)
19 {
20   char *p;
21   p = kz_kmalloc(2);
22   p[0] = LEDDRV_CMD_LED_TOGGLE;
23   p[1] = '0' + target;
24   kz_send(MSGBOX_ID_LEDDRIVE, 2, p);
25 }
26
27 /* \e$B%9%l%C%I$+$i$NMW5a$r=hM}$9$k\e(B */
28 static int leddrv_command(char *p)
29 {
30   int cmd = p[0];
31   int led = p[1] - '0';
32   switch (cmd) {
33   case LEDDRV_CMD_LED_ON:
34     led_write(led, LedOn);
35     break;
36   case LEDDRV_CMD_LED_OFF:
37     led_write(led, LedOff);
38     break;
39   case LEDDRV_CMD_LED_TOGGLE:
40     led_toggle(led);
41     break;
42   default:
43     break;
44   }
45   kz_kmfree(p);
46
47   return 0;
48 }
49
50 int driver_led(int argc, char *argv[])
51 {
52   int size;
53   char *p;
54
55   led_init();
56
57   while (1) {
58     kz_recv(MSGBOX_ID_LEDDRIVE, &size, &p);
59     leddrv_command(p);
60   }
61
62   return 0;
63 }