OSDN Git Service

First commitment for the BlackTank LPC1769.
[blacktank/blacktank.git] / task_userinput.c
1 /**
2  * @file task_userinput.c
3  * @author Shinichiro Nakamura
4  * @brief ユーザインプットタスクの実装(task_userinput)
5  * @details
6  * ユーザインプットタスクは4系統のユーザ入力の変化を観察するタスク。
7  * 変化があればデータキューを介してメニュータスクに通知を行う。
8  */
9
10 #include <LPC17xx.h>
11 #include <kernel.h>
12 #include <t_syslog.h>
13
14 #include "kernel_cfg.h"
15 #include "task_userinput.h"
16 #include "task_menu.h"
17 #include "hid.h"
18
19 void task_userinput(intptr_t exinf)
20 {
21     uint16_t initdone = 0;
22     uint16_t s0prev = 0, s1prev = 0, s2prev = 0, s3prev = 0;
23     uint16_t v0prev = 0, v1prev = 0, v2prev = 0, v3prev = 0;
24     hid_init();
25     while(1)
26     {
27         /*
28          * Sense.
29          */
30         uint16_t s0curr = hid_swread(0);
31         uint16_t s1curr = hid_swread(1);
32         uint16_t s2curr = hid_swread(2);
33         uint16_t s3curr = hid_swread(3);
34         uint16_t v0curr = (uint16_t)(hid_volread(0) >> 2);
35         uint16_t v1curr = (uint16_t)(hid_volread(1) >> 2);
36         uint16_t v2curr = (uint16_t)(hid_volread(2) >> 2);
37         uint16_t v3curr = (uint16_t)(hid_volread(3) >> 2);
38
39         /*
40          * Diff.
41          */
42         if ((s0prev != s0curr) || (!initdone)) {
43             if (s0curr) {
44                 TSKAPI_MENU_USERMSG(DEVICE_SW0, 1);
45             } else {
46                 TSKAPI_MENU_USERMSG(DEVICE_SW0, 0);
47             }
48         }
49         if ((s1prev != s1curr) || (!initdone)) {
50             if (s1curr) {
51                 TSKAPI_MENU_USERMSG(DEVICE_SW1, 1);
52             } else {
53                 TSKAPI_MENU_USERMSG(DEVICE_SW1, 0);
54             }
55         }
56         if ((s2prev != s2curr) || (!initdone)) {
57             if (s2curr) {
58                 TSKAPI_MENU_USERMSG(DEVICE_SW2, 1);
59             } else {
60                 TSKAPI_MENU_USERMSG(DEVICE_SW2, 0);
61             }
62         }
63         if ((s3prev != s3curr) || (!initdone)) {
64             if (s3curr) {
65                 TSKAPI_MENU_USERMSG(DEVICE_SW3, 1);
66             } else {
67                 TSKAPI_MENU_USERMSG(DEVICE_SW3, 0);
68             }
69         }
70         if ((v0prev != v0curr) || (!initdone)) {
71             TSKAPI_MENU_USERMSG(DEVICE_VOL0, v0curr);
72         }
73         if ((v1prev != v1curr) || (!initdone)) {
74             TSKAPI_MENU_USERMSG(DEVICE_VOL1, v1curr);
75         }
76         if ((v2prev != v2curr) || (!initdone)) {
77             TSKAPI_MENU_USERMSG(DEVICE_VOL2, v2curr);
78         }
79         if ((v3prev != v3curr) || (!initdone)) {
80             TSKAPI_MENU_USERMSG(DEVICE_VOL3, v3curr);
81         }
82         initdone = 1;
83
84         /*
85          * Store.
86          */
87         s0prev = s0curr;
88         s1prev = s1curr;
89         s2prev = s2curr;
90         s3prev = s3curr;
91         v0prev = v0curr;
92         v1prev = v1curr;
93         v2prev = v2curr;
94         v3prev = v3curr;
95
96         tslp_tsk(50);
97     }
98 }
99