OSDN Git Service

Step 10 added.
[kozos-expbrd/kozos_expbrd.git] / firm / junk / 06 / os / clock.c
1 #include "defines.h"
2 #include "kozos.h"
3 #include "consdrv.h"
4 #include "timerdrv.h"
5 #include "leddrv.h"
6 #include "lib.h"
7 #include "sw.h"
8 #include "lcd.h"
9 #include "re.h"
10
11 /* ¥³¥ó¥½¡¼¥ë¤Ø¤Îʸ»úÎó½ÐÎϤò¥³¥ó¥½¡¼¥ë¡¦¥É¥é¥¤¥Ð¤Ë°ÍÍꤹ¤ë */
12 static void send_write(char *str)
13 {
14   char *p;
15   int len;
16   len = strlen(str);
17   p = kz_kmalloc(len + 2);
18   p[0] = '0';
19   p[1] = CONSDRV_CMD_WRITE;
20   memcpy(&p[2], str, len);
21   kz_send(MSGBOX_ID_CONSOUTPUT, len + 2, p);
22 }
23
24 /* ¥¿¥¤¥Þ¤Î¥«¥¦¥ó¥È³«»Ï¤ò¥¿¥¤¥Þ¡¦¥É¥é¥¤¥Ð¤Ë°ÍÍꤹ¤ë */
25 static void send_start(int msec)
26 {
27   struct timerreq *req;
28   req = kz_kmalloc(sizeof(*req));
29   req->id = MSGBOX_ID_TIMEXPIRE;
30   req->msec = msec;
31   kz_send(MSGBOX_ID_TIMDRIVE, TIMERDRV_CMD_START, (char *)req);
32 }
33
34 static void send_led_write(int target, int state)
35 {
36   char *p;
37   p = kz_kmalloc(2);
38   p[0] = state ? LEDDRV_CMD_LED_ON : LEDDRV_CMD_LED_OFF;
39   p[1] = '0' + target;
40   kz_send(MSGBOX_ID_LEDDRIVE, 2, p);
41 }
42
43 static void send_led_toggle(int target)
44 {
45   char *p;
46   p = kz_kmalloc(2);
47   p[0] = LEDDRV_CMD_LED_TOGGLE;
48   p[1] = '0' + target;
49   kz_send(MSGBOX_ID_LEDDRIVE, 2, p);
50 }
51
52 int clock_main(int argc, char *argv[])
53 {
54   uint8 val = 0;
55
56   re_init();
57   lcd_init();
58   lcd_clear();
59   lcd_draw_string(5, 5, "KOZOS EXPBRD #00", 0);
60   sw_init();
61
62   uint16 prev = 0, curr = 0;
63   while (1) {
64     val = (val + 1) % 101;
65     lcd_draw_progressbar(5, 20, 121 - 5, 25, 0, 100, val, 0);
66
67     send_start(10);
68     kz_recv(MSGBOX_ID_TIMEXPIRE, NULL, NULL);
69     if (sw_read(Sw1)) {
70       send_led_write(0, 1);
71     } else {
72       send_led_toggle(0);
73     }
74
75     send_start(10);
76     kz_recv(MSGBOX_ID_TIMEXPIRE, NULL, NULL);
77     if (sw_read(Sw2)) {
78       send_led_write(1, 1);
79     } else {
80       send_led_toggle(1);
81     }
82
83     curr = re_read();
84     if (curr != prev) {
85       int dir = (int)(curr & 0xff) - (int)(prev & 0xff);
86       if (dir < 0) {
87         if (-32 < dir) {
88           send_write("<-\n");
89           send_led_toggle(2);
90           send_led_write(3, 0);
91         }
92       } else {
93         if (dir < 32) {
94           send_write("->\n");
95           send_led_write(2, 0);
96           send_led_toggle(3);
97         }
98       }
99       prev = curr;
100     }
101   }
102
103   return 0;
104 }