@@ -27,7 +27,6 @@ ZBUS_LISTENER_DEFINE(led, led_callback);
27
27
ZBUS_CHAN_ADD_OBS (ERROR_CHAN , led , 0 );
28
28
ZBUS_CHAN_ADD_OBS (CONFIG_CHAN , led , 0 );
29
29
ZBUS_CHAN_ADD_OBS (NETWORK_CHAN , led , 0 );
30
- ZBUS_CHAN_ADD_OBS (TRIGGER_MODE_CHAN , led , 0 );
31
30
ZBUS_CHAN_ADD_OBS (LOCATION_CHAN , led , 0 );
32
31
33
32
/* Zephyr SMF states */
@@ -37,10 +36,6 @@ enum state {
37
36
STATE_LED_SET ,
38
37
/* Sub-state to STATE_RUNNING */
39
38
STATE_LED_NOT_SET ,
40
- /* Sub-state to STATE_LED_NOT_SET */
41
- STATE_POLL ,
42
- /* Sub-state to STATE_LED_NOT_SET */
43
- STATE_NORMAL ,
44
39
STATE_ERROR ,
45
40
};
46
41
@@ -73,9 +68,6 @@ struct s_object {
73
68
/* This must be first */
74
69
struct smf_ctx ctx ;
75
70
76
- /* Trigger mode */
77
- enum trigger_mode mode ;
78
-
79
71
/* Network status */
80
72
enum network_msg_type status ;
81
73
@@ -240,11 +232,8 @@ static void on_network_disconnected(void)
240
232
* - STATE_RUNNING: Initial state, the module is running
241
233
* - STATE_LED_SET: LED is configured by the user
242
234
* - STATE_LED_NOT_SET: LED is not configured by the user, operational pattern is displayed
243
- * - STATE_POLL: Poll pattern or location search pattern is displayed depending on
244
- the location status
245
- * - STATE_NORMAL: Led is off or location search pattern is displayed depending on
246
- * the location status
247
- * - STATE_ERROR: An error has occured
235
+ * (LED off or location search pattern)
236
+ * - STATE_ERROR: An error has occurred
248
237
*/
249
238
250
239
/* STATE_RUNNING */
@@ -266,7 +255,6 @@ static void running_run(void *o)
266
255
}
267
256
268
257
if (& NETWORK_CHAN == user_object -> chan && user_object -> status == NETWORK_CONNECTED ) {
269
-
270
258
/* If the network is connected, we just reenter the same state */
271
259
smf_set_state (SMF_CTX (user_object ), & states [STATE_RUNNING ]);
272
260
return ;
@@ -299,67 +287,44 @@ static void led_set_running(void *o)
299
287
300
288
if ((& CONFIG_CHAN == user_object -> chan ) &&
301
289
is_rgb_off (user_object -> red , user_object -> green , user_object -> blue )) {
302
-
303
- if (user_object -> mode == TRIGGER_MODE_NORMAL ) {
304
- smf_set_state (SMF_CTX (user_object ), & states [STATE_NORMAL ]);
305
- return ;
306
- } else if (user_object -> mode == TRIGGER_MODE_POLL ) {
307
- smf_set_state (SMF_CTX (user_object ), & states [STATE_POLL ]);
308
- return ;
309
- }
310
- }
311
-
312
- if ((& CONFIG_CHAN == user_object -> chan ) &&
313
- !is_rgb_off (user_object -> red , user_object -> green , user_object -> blue )) {
314
-
315
- smf_set_state (SMF_CTX (user_object ), & states [STATE_LED_SET ]);
290
+ smf_set_state (SMF_CTX (user_object ), & states [STATE_LED_NOT_SET ]);
316
291
return ;
317
292
}
318
- }
319
-
320
- /* STATE_LED_NOT_SET */
321
-
322
- static void led_not_set_running (void * o )
323
- {
324
- struct s_object * user_object = o ;
325
-
326
- LOG_DBG ("led_not_set_running" );
327
293
328
294
if ((& CONFIG_CHAN == user_object -> chan ) &&
329
295
!is_rgb_off (user_object -> red , user_object -> green , user_object -> blue )) {
330
-
331
296
smf_set_state (SMF_CTX (user_object ), & states [STATE_LED_SET ]);
332
297
return ;
333
298
}
334
299
}
335
300
336
- /* STATE_POLL */
301
+ /* STATE_LED_NOT_SET */
337
302
338
- static void poll_entry (void * o )
303
+ static void led_not_set_entry (void * o )
339
304
{
340
305
ARG_UNUSED (o );
341
306
342
- LOG_DBG ("poll_entry " );
307
+ LOG_DBG ("led_not_set_entry " );
343
308
344
309
transition_list_clear ();
345
- transition_list_append (LED_POLL_MODE , HOLD_FOREVER , 0 , 0 , 0 );
310
+ transition_list_append (LED_OFF , HOLD_FOREVER , 0 , 0 , 0 );
346
311
347
312
k_work_reschedule (& led_pattern_update_work , K_NO_WAIT );
348
313
}
349
314
350
- static void poll_running (void * o )
315
+ static void led_not_set_running (void * o )
351
316
{
352
317
struct s_object * user_object = o ;
353
318
354
- LOG_DBG ("poll_running " );
319
+ LOG_DBG ("led_not_set_running " );
355
320
356
- if ((& TRIGGER_MODE_CHAN == user_object -> chan ) && user_object -> mode == TRIGGER_MODE_NORMAL ) {
357
- smf_set_state (SMF_CTX (user_object ), & states [STATE_NORMAL ]);
321
+ if ((& CONFIG_CHAN == user_object -> chan ) &&
322
+ !is_rgb_off (user_object -> red , user_object -> green , user_object -> blue )) {
323
+ smf_set_state (SMF_CTX (user_object ), & states [STATE_LED_SET ]);
358
324
return ;
359
325
}
360
326
361
327
if ((& LOCATION_CHAN == user_object -> chan ) && user_object -> location_status == LOCATION_SEARCH_STARTED ) {
362
-
363
328
transition_list_clear ();
364
329
transition_list_append (LED_LOCATION_SEARCHING , HOLD_FOREVER , 0 , 0 , 0 );
365
330
@@ -368,51 +333,12 @@ static void poll_running(void *o)
368
333
}
369
334
370
335
if ((& LOCATION_CHAN == user_object -> chan ) && user_object -> location_status == LOCATION_SEARCH_DONE ) {
371
-
372
- smf_set_state (SMF_CTX (user_object ), & states [STATE_POLL ]);
373
- return ;
374
- }
375
- }
376
-
377
- /* STATE_NORMAL */
378
-
379
- static void normal_entry (void * o )
380
- {
381
- ARG_UNUSED (o );
382
-
383
- LOG_DBG ("normal_entry" );
384
-
385
- transition_list_clear ();
386
- transition_list_append (LED_OFF , HOLD_FOREVER , 0 , 0 , 0 );
387
-
388
- k_work_reschedule (& led_pattern_update_work , K_NO_WAIT );
389
- }
390
-
391
- static void normal_running (void * o )
392
- {
393
- struct s_object * user_object = o ;
394
-
395
- LOG_DBG ("normal_running" );
396
-
397
- if ((& TRIGGER_MODE_CHAN == user_object -> chan ) && user_object -> mode == TRIGGER_MODE_POLL ) {
398
- smf_set_state (SMF_CTX (user_object ), & states [STATE_POLL ]);
399
- return ;
400
- }
401
-
402
- if ((& LOCATION_CHAN == user_object -> chan ) && user_object -> location_status == LOCATION_SEARCH_STARTED ) {
403
-
404
336
transition_list_clear ();
405
- transition_list_append (LED_LOCATION_SEARCHING , HOLD_FOREVER , 0 , 0 , 0 );
337
+ transition_list_append (LED_OFF , HOLD_FOREVER , 0 , 0 , 0 );
406
338
407
339
k_work_reschedule (& led_pattern_update_work , K_NO_WAIT );
408
340
return ;
409
341
}
410
-
411
- if ((& LOCATION_CHAN == user_object -> chan ) && user_object -> location_status == LOCATION_SEARCH_DONE ) {
412
-
413
- smf_set_state (SMF_CTX (user_object ), & states [STATE_NORMAL ]);
414
- return ;
415
- }
416
342
}
417
343
418
344
/* STATE_ERROR */
@@ -449,24 +375,10 @@ static const struct smf_state states[] = {
449
375
NULL
450
376
),
451
377
[STATE_LED_NOT_SET ] = SMF_CREATE_STATE (
452
- NULL ,
378
+ led_not_set_entry ,
453
379
led_not_set_running ,
454
380
NULL ,
455
381
& states [STATE_RUNNING ],
456
- & states [STATE_NORMAL ]
457
- ),
458
- [STATE_POLL ] = SMF_CREATE_STATE (
459
- poll_entry ,
460
- poll_running ,
461
- NULL ,
462
- & states [STATE_LED_NOT_SET ],
463
- NULL
464
- ),
465
- [STATE_NORMAL ] = SMF_CREATE_STATE (
466
- normal_entry ,
467
- normal_running ,
468
- NULL ,
469
- & states [STATE_LED_NOT_SET ],
470
382
NULL
471
383
),
472
384
[STATE_ERROR ] = SMF_CREATE_STATE (
@@ -487,27 +399,18 @@ void led_callback(const struct zbus_channel *chan)
487
399
state_object .chan = chan ;
488
400
489
401
/* Update the state object with the message received on the channel */
490
- if (& TRIGGER_MODE_CHAN == chan ) {
491
- const enum trigger_mode * mode = zbus_chan_const_msg (chan );
492
-
493
- state_object .mode = * mode ;
494
- }
495
-
496
402
if (& NETWORK_CHAN == chan ) {
497
403
const struct network_msg * msg = zbus_chan_const_msg (chan );
498
-
499
404
state_object .status = msg -> type ;
500
405
}
501
406
502
407
if (& LOCATION_CHAN == chan ) {
503
408
const enum location_status * status = zbus_chan_const_msg (chan );
504
-
505
409
state_object .location_status = * status ;
506
410
}
507
411
508
412
if (& CONFIG_CHAN == chan ) {
509
413
/* Get LED configuration from channel. */
510
-
511
414
const struct configuration * config = zbus_chan_const_msg (chan );
512
415
513
416
if (config -> led_present == false) {
@@ -549,7 +452,6 @@ void led_callback(const struct zbus_channel *chan)
549
452
static int led_init (void )
550
453
{
551
454
smf_set_initial (SMF_CTX (& state_object ), & states [STATE_RUNNING ]);
552
-
553
455
return 0 ;
554
456
}
555
457
0 commit comments