OSDN Git Service

First commitment for the BlackTank LPC1769.
[blacktank/blacktank.git] / task_led.c
1 /**
2  * @file task_led.c
3  * @author Shinichiro Nakamura
4  * @brief LEDタスクの実装(task_led)
5  * @details
6  * LEDタスクはLEDの点灯を制御するタスクである。
7  * 点灯は各タスクから次のマクロのみで指示することができる。
8  * LEDMSG(target, control);
9  */
10
11 #include <LPC17xx.h>
12 #include <kernel.h>
13 #include <t_syslog.h>
14
15 #include "kernel_cfg.h"
16 #include "task_led.h"
17 #include "led.h"
18
19 #define MSG_CONTROL(n) (((n) & 0x0080) ? 1 : 0)
20 #define MSG_TARGET(n) ((n) & 0x000F)
21
22 void task_led(intptr_t exinf)
23 {
24     uint16_t msg;
25     led_init();
26     while(1)
27     {
28         if (rcv_dtq(DTQ_LED, (intptr_t *)&msg) == E_OK) {
29             switch (MSG_TARGET(msg)) {
30                 case DBLED0:
31                     led_debug_write(0, MSG_CONTROL(msg));
32                     break;
33                 case DBLED1:
34                     led_debug_write(1, MSG_CONTROL(msg));
35                     break;
36                 case DBLED2:
37                     led_debug_write(2, MSG_CONTROL(msg));
38                     break;
39                 case DBLED3:
40                     led_debug_write(3, MSG_CONTROL(msg));
41                     break;
42                 case SWLED0:
43                     led_switch_write(0, MSG_CONTROL(msg));
44                     break;
45                 case SWLED1:
46                     led_switch_write(1, MSG_CONTROL(msg));
47                     break;
48                 case SWLED2:
49                     led_switch_write(2, MSG_CONTROL(msg));
50                     break;
51                 case SWLED3:
52                     led_switch_write(3, MSG_CONTROL(msg));
53                     break;
54             }
55         }
56         tslp_tsk(10);
57     }
58 }
59