OSDN Git Service

Step 10 added.
[kozos-expbrd/kozos_expbrd.git] / firm / junk / 07 / 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 #include "pff.h"
11
12 /* ¥³¥ó¥½¡¼¥ë¤Ø¤Îʸ»úÎó½ÐÎϤò¥³¥ó¥½¡¼¥ë¡¦¥É¥é¥¤¥Ð¤Ë°ÍÍꤹ¤ë */
13 static void send_write(char *str)
14 {
15   char *p;
16   int len;
17   len = strlen(str);
18   p = kz_kmalloc(len + 2);
19   p[0] = '0';
20   p[1] = CONSDRV_CMD_WRITE;
21   memcpy(&p[2], str, len);
22   kz_send(MSGBOX_ID_CONSOUTPUT, len + 2, p);
23 }
24
25 /* ¥¿¥¤¥Þ¤Î¥«¥¦¥ó¥È³«»Ï¤ò¥¿¥¤¥Þ¡¦¥É¥é¥¤¥Ð¤Ë°ÍÍꤹ¤ë */
26 static void send_start(int msec)
27 {
28   struct timerreq *req;
29   req = kz_kmalloc(sizeof(*req));
30   req->id = MSGBOX_ID_TIMEXPIRE;
31   req->msec = msec;
32   kz_send(MSGBOX_ID_TIMDRIVE, TIMERDRV_CMD_START, (char *)req);
33 }
34
35 static void send_led_write(int target, int state)
36 {
37   char *p;
38   p = kz_kmalloc(2);
39   p[0] = state ? LEDDRV_CMD_LED_ON : LEDDRV_CMD_LED_OFF;
40   p[1] = '0' + target;
41   kz_send(MSGBOX_ID_LEDDRIVE, 2, p);
42 }
43
44 static void send_led_toggle(int target)
45 {
46   char *p;
47   p = kz_kmalloc(2);
48   p[0] = LEDDRV_CMD_LED_TOGGLE;
49   p[1] = '0' + target;
50   kz_send(MSGBOX_ID_LEDDRIVE, 2, p);
51 }
52
53 static void die(int code)
54 {
55   puts("die with code 0x");
56   putxval(code, 4);
57   puts(".\n");
58   while (1) { }
59 }
60
61 static int func_fread(void *buf, const uint32 size, void *extobj)
62 {
63   WORD br;
64   int rc = pf_read(buf, size, &br);
65   return rc ? 1 : 0;
66 }
67
68 static void func_pixel_write(const int x, const int y, const uint8 r, const uint8 g, const uint8 b, void *extobj)
69 {
70   lcd_set_pixel(x, y, 0);
71 }
72
73 int clock_main(int argc, char *argv[])
74 {
75   uint8 val = 0;
76
77   re_init();
78   lcd_init();
79   sw_init();
80
81   uint16 prev = 0, curr = 0;
82   while (1) {
83     val = (val + 1) % 101;
84     lcd_draw_progressbar(5, 20, 121 - 5, 25, 0, 100, val, 0);
85
86     send_start(10);
87     kz_recv(MSGBOX_ID_TIMEXPIRE, NULL, NULL);
88     if (sw_read(Sw1)) {
89       send_led_write(0, 1);
90     } else {
91       send_led_toggle(0);
92     }
93
94     send_start(10);
95     kz_recv(MSGBOX_ID_TIMEXPIRE, NULL, NULL);
96     if (sw_read(Sw2)) {
97       send_led_write(1, 1);
98     } else {
99       send_led_toggle(1);
100     }
101
102     curr = re_read();
103     if (curr != prev) {
104       int dir = (int)(curr & 0xff) - (int)(prev & 0xff);
105       if (dir < 0) {
106         if (-32 < dir) {
107           send_write("<-\n");
108           send_led_toggle(2);
109           send_led_write(3, 0);
110         }
111       } else {
112         if (dir < 32) {
113           send_write("->\n");
114           send_led_write(2, 0);
115           send_led_toggle(3);
116         }
117       }
118       prev = curr;
119     }
120   }
121
122   return 0;
123 }