17
17
/* scheduling priority used by each thread */
18
18
#define PRIORITY 7
19
19
20
+ #define LED0_NODE DT_ALIAS(led0)
21
+ #define LED1_NODE DT_ALIAS(led1)
22
+
23
+ /*
24
+ * Devicetree helper macro which gets the 'flags' cell from a 'gpios'
25
+ * property, or returns 0 if the property has no 'flags' cell.
26
+ */
27
+
28
+ #define FLAGS_OR_ZERO (node ) \
29
+ COND_CODE_1(DT_PHA_HAS_CELL(node, gpios, flags), \
30
+ (DT_GPIO_FLAGS(node, gpios)), \
31
+ (0))
32
+
20
33
struct printk_data_t {
21
34
void * fifo_reserved ; /* 1st word reserved for use by fifo */
22
35
u32_t led ;
@@ -25,18 +38,6 @@ struct printk_data_t {
25
38
26
39
K_FIFO_DEFINE (printk_fifo );
27
40
28
- #if DT_PHA_HAS_CELL (DT_ALIAS (led0 ), gpios , flags )
29
- #define LED0_FLAGS DT_GPIO_FLAGS(DT_ALIAS(led0), gpios)
30
- #else
31
- #define LED0_FLAGS 0
32
- #endif
33
-
34
- #if DT_PHA_HAS_CELL (DT_ALIAS (led1 ), gpios , flags )
35
- #define LED1_FLAGS DT_GPIO_FLAGS(DT_ALIAS(led1), gpios)
36
- #else
37
- #define LED1_FLAGS 0
38
- #endif
39
-
40
41
struct led {
41
42
const char * gpio_dev_name ;
42
43
const char * gpio_pin_name ;
@@ -51,8 +52,11 @@ void blink(const struct led *led, u32_t sleep_ms, u32_t id)
51
52
int ret ;
52
53
53
54
gpio_dev = device_get_binding (led -> gpio_dev_name );
54
- __ASSERT (gpio_dev != NULL , "Error: didn't find %s device\n" ,
55
- led -> gpio_dev_name );
55
+ if (gpio_dev == NULL ) {
56
+ printk ("Error: didn't find %s device\n" ,
57
+ led -> gpio_dev_name );
58
+ return ;
59
+ }
56
60
57
61
ret = gpio_pin_configure (gpio_dev , led -> gpio_pin , led -> gpio_flags );
58
62
if (ret != 0 ) {
@@ -79,42 +83,52 @@ void blink(const struct led *led, u32_t sleep_ms, u32_t id)
79
83
}
80
84
}
81
85
82
- void blink1 (void )
86
+ void blink0 (void )
83
87
{
84
- const struct led led1 = {
85
- .gpio_dev_name = DT_GPIO_LABEL (DT_ALIAS (led0 ), gpios ),
86
- .gpio_pin_name = DT_LABEL (DT_ALIAS (led0 )),
87
- .gpio_pin = DT_GPIO_PIN (DT_ALIAS (led0 ), gpios ),
88
- .gpio_flags = GPIO_OUTPUT | LED0_FLAGS ,
88
+ const struct led led0 = {
89
+ #if DT_NODE_HAS_STATUS (LED0_NODE , okay )
90
+ .gpio_dev_name = DT_GPIO_LABEL (LED0_NODE , gpios ),
91
+ .gpio_pin_name = DT_LABEL (LED0_NODE ),
92
+ .gpio_pin = DT_GPIO_PIN (LED0_NODE , gpios ),
93
+ .gpio_flags = GPIO_OUTPUT | FLAGS_OR_ZERO (LED0_NODE ),
94
+ #else
95
+ #error "Unsupported board: led0 devicetree alias is not defined"
96
+ #endif
89
97
};
90
98
91
- blink (& led1 , 100 , 0 );
99
+ blink (& led0 , 100 , 0 );
92
100
}
93
101
94
- void blink2 (void )
102
+ void blink1 (void )
95
103
{
96
- const struct led led2 = {
97
- .gpio_dev_name = DT_GPIO_LABEL (DT_ALIAS (led1 ), gpios ),
98
- .gpio_pin_name = DT_LABEL (DT_ALIAS (led1 )),
99
- .gpio_pin = DT_GPIO_PIN (DT_ALIAS (led1 ), gpios ),
100
- .gpio_flags = GPIO_OUTPUT | LED1_FLAGS ,
104
+ const struct led led1 = {
105
+ #if DT_NODE_HAS_STATUS (LED1_NODE , okay )
106
+ .gpio_dev_name = DT_GPIO_LABEL (LED1_NODE , gpios ),
107
+ .gpio_pin_name = DT_LABEL (LED1_NODE ),
108
+ .gpio_pin = DT_GPIO_PIN (LED1_NODE , gpios ),
109
+ .gpio_flags = GPIO_OUTPUT | FLAGS_OR_ZERO (LED1_NODE ),
110
+ #else
111
+ #error "Unsupported board: led1 devicetree alias is not defined"
112
+ #endif
101
113
};
102
114
103
- blink (& led2 , 1000 , 1 );
115
+ blink (& led1 , 1000 , 1 );
104
116
}
105
117
106
118
void uart_out (void )
107
119
{
108
120
while (1 ) {
109
- struct printk_data_t * rx_data = k_fifo_get (& printk_fifo , K_FOREVER );
110
- printk ("Toggle USR%d LED: Counter = %d\n" , rx_data -> led , rx_data -> cnt );
121
+ struct printk_data_t * rx_data = k_fifo_get (& printk_fifo ,
122
+ K_FOREVER );
123
+ printk ("Toggled led%d; counter=%d\n" ,
124
+ rx_data -> led , rx_data -> cnt );
111
125
k_free (rx_data );
112
126
}
113
127
}
114
128
115
- K_THREAD_DEFINE (blink1_id , STACKSIZE , blink1 , NULL , NULL , NULL ,
129
+ K_THREAD_DEFINE (blink0_id , STACKSIZE , blink0 , NULL , NULL , NULL ,
116
130
PRIORITY , 0 , 0 );
117
- K_THREAD_DEFINE (blink2_id , STACKSIZE , blink2 , NULL , NULL , NULL ,
131
+ K_THREAD_DEFINE (blink1_id , STACKSIZE , blink1 , NULL , NULL , NULL ,
118
132
PRIORITY , 0 , 0 );
119
133
K_THREAD_DEFINE (uart_out_id , STACKSIZE , uart_out , NULL , NULL , NULL ,
120
134
PRIORITY , 0 , 0 );
0 commit comments