10
10
#include <zephyr/task_wdt/task_wdt.h>
11
11
#include <zephyr/smf.h>
12
12
13
- #include "modules_common.h"
14
13
#include "message_channel.h"
15
14
#include "button.h"
16
15
#include "network.h"
@@ -154,8 +153,6 @@ struct main_state {
154
153
enum location_msg_type location_status ;
155
154
};
156
155
157
- static struct main_state main_state ;
158
-
159
156
/* Construct state table */
160
157
static const struct smf_state states [] = {
161
158
[STATE_RUNNING ] = SMF_CREATE_STATE (
@@ -333,11 +330,11 @@ static void running_entry(void *o)
333
330
if (state_object -> status == CLOUD_CONNECTED_READY_TO_SEND ||
334
331
state_object -> status == CLOUD_PAYLOAD_JSON ||
335
332
state_object -> status == CLOUD_POLL_SHADOW ) {
336
- STATE_SET ( main_state , STATE_TRIGGERING );
333
+ smf_set_state ( SMF_CTX ( state_object ), & states [ STATE_TRIGGERING ] );
337
334
return ;
338
335
}
339
336
340
- STATE_SET ( main_state , STATE_IDLE );
337
+ smf_set_state ( SMF_CTX ( state_object ), & states [ STATE_IDLE ] );
341
338
}
342
339
343
340
static void running_run (void * o )
@@ -346,7 +343,7 @@ static void running_run(void *o)
346
343
347
344
if (state_object -> chan == & FOTA_CHAN &&
348
345
state_object -> fota_status == FOTA_DOWNLOADING_UPDATE ) {
349
- STATE_SET ( main_state , STATE_FOTA );
346
+ smf_set_state ( SMF_CTX ( state_object ), & states [ STATE_FOTA ] );
350
347
return ;
351
348
}
352
349
}
@@ -389,7 +386,7 @@ static void idle_run(void *o)
389
386
390
387
if ((state_object -> chan == & CLOUD_CHAN ) &&
391
388
(state_object -> status == CLOUD_CONNECTED_READY_TO_SEND )) {
392
- STATE_SET ( main_state , STATE_TRIGGERING );
389
+ smf_set_state ( SMF_CTX ( state_object ), & states [ STATE_TRIGGERING ] );
393
390
return ;
394
391
}
395
392
}
@@ -433,7 +430,7 @@ static void triggering_run(void *o)
433
430
if ((state_object -> chan == & CLOUD_CHAN ) &&
434
431
((state_object -> status == CLOUD_CONNECTED_PAUSED ) ||
435
432
(state_object -> status == CLOUD_DISCONNECTED ))) {
436
- STATE_SET ( main_state , STATE_IDLE );
433
+ smf_set_state ( SMF_CTX ( state_object ), & states [ STATE_IDLE ] );
437
434
return ;
438
435
}
439
436
@@ -469,12 +466,12 @@ static void requesting_location_run(void *o)
469
466
470
467
if (state_object -> chan == & LOCATION_CHAN &&
471
468
(state_object -> location_status == LOCATION_SEARCH_DONE )) {
472
- STATE_SET ( main_state , STATE_REQUESTING_SENSORS_AND_POLLING );
469
+ smf_set_state ( SMF_CTX ( state_object ), & states [ STATE_REQUESTING_SENSORS_AND_POLLING ] );
473
470
return ;
474
471
}
475
472
476
473
if (state_object -> chan == & BUTTON_CHAN ) {
477
- STATE_EVENT_HANDLED ( main_state );
474
+ smf_set_handled ( SMF_CTX ( state_object ) );
478
475
return ;
479
476
}
480
477
}
@@ -483,28 +480,28 @@ static void requesting_location_run(void *o)
483
480
484
481
static void requesting_sensors_and_polling_entry (void * o )
485
482
{
486
- ARG_UNUSED ( o ) ;
483
+ const struct main_state * state_object = ( const struct main_state * ) o ;
487
484
488
485
LOG_DBG ("%s" , __func__ );
489
486
490
487
sensor_and_poll_triggers_send ();
491
488
492
- LOG_DBG ("Next trigger in %lld seconds" , main_state . interval_sec );
489
+ LOG_DBG ("Next trigger in %lld seconds" , state_object -> interval_sec );
493
490
494
- k_work_reschedule (& trigger_work , K_SECONDS (main_state . interval_sec ));
491
+ k_work_reschedule (& trigger_work , K_SECONDS (state_object -> interval_sec ));
495
492
}
496
493
497
494
static void requesting_sensors_and_polling_run (void * o )
498
495
{
499
496
const struct main_state * state_object = (const struct main_state * )o ;
500
497
501
498
if (state_object -> chan == & TIMER_CHAN ) {
502
- STATE_SET ( main_state , STATE_REQUESTING_LOCATION );
499
+ smf_set_state ( SMF_CTX ( state_object ), & states [ STATE_REQUESTING_LOCATION ] );
503
500
return ;
504
501
}
505
502
506
503
if (state_object -> chan == & BUTTON_CHAN ) {
507
- STATE_SET ( main_state , STATE_REQUESTING_LOCATION );
504
+ smf_set_state ( SMF_CTX ( state_object ), & states [ STATE_REQUESTING_LOCATION ] );
508
505
return ;
509
506
}
510
507
}
@@ -540,7 +537,7 @@ static void fota_run(void *o)
540
537
case FOTA_DOWNLOAD_TIMED_OUT :
541
538
__fallthrough ;
542
539
case FOTA_DOWNLOAD_FAILED :
543
- STATE_SET ( main_state , STATE_RUNNING );
540
+ smf_set_state ( SMF_CTX ( state_object ), & states [ STATE_RUNNING ] );
544
541
return ;
545
542
default :
546
543
/* Don't care */
@@ -558,10 +555,11 @@ static void fota_downloading_run(void *o)
558
555
if (state_object -> chan == & FOTA_CHAN ) {
559
556
switch (state_object -> fota_status ) {
560
557
case FOTA_SUCCESS_REBOOT_NEEDED :
561
- STATE_SET (main_state , STATE_FOTA_NETWORK_DISCONNECT );
558
+ smf_set_state (SMF_CTX (state_object ),
559
+ & states [STATE_FOTA_NETWORK_DISCONNECT ]);
562
560
return ;
563
561
case FOTA_IMAGE_APPLY_NEEDED :
564
- STATE_SET ( main_state , STATE_FOTA_APPLYING_IMAGE );
562
+ smf_set_state ( SMF_CTX ( state_object ), & states [ STATE_FOTA_APPLYING_IMAGE ] );
565
563
return ;
566
564
default :
567
565
/* Don't care */
@@ -596,7 +594,7 @@ static void fota_network_disconnect_run(void *o)
596
594
597
595
if (state_object -> chan == & NETWORK_CHAN &&
598
596
state_object -> network_status == NETWORK_DISCONNECTED ) {
599
- STATE_SET ( main_state , STATE_FOTA_REBOOTING );
597
+ smf_set_state ( SMF_CTX ( state_object ), & states [ STATE_FOTA_REBOOTING ] );
600
598
return ;
601
599
}
602
600
}
@@ -639,7 +637,7 @@ static void fota_applying_image_run(void *o)
639
637
640
638
} else if (state_object -> chan == & FOTA_CHAN &&
641
639
state_object -> fota_status == FOTA_SUCCESS_REBOOT_NEEDED ) {
642
- STATE_SET ( main_state , STATE_FOTA_REBOOTING );
640
+ smf_set_state ( SMF_CTX ( state_object ), & states [ STATE_FOTA_REBOOTING ] );
643
641
return ;
644
642
}
645
643
}
@@ -671,14 +669,15 @@ int main(void)
671
669
const uint32_t execution_time_ms =
672
670
(CONFIG_APP_MSG_PROCESSING_TIMEOUT_SECONDS * MSEC_PER_SEC );
673
671
const k_timeout_t zbus_wait_ms = K_MSEC (wdt_timeout_ms - execution_time_ms );
672
+ struct main_state main_state ;
674
673
675
674
main_state .interval_sec = CONFIG_APP_MODULE_TRIGGER_TIMEOUT_SECONDS ;
676
675
677
676
LOG_DBG ("Main has started" );
678
677
679
678
task_wdt_id = task_wdt_add (wdt_timeout_ms , task_wdt_callback , (void * )k_current_get ());
680
679
681
- STATE_SET_INITIAL ( main_state , STATE_RUNNING );
680
+ smf_set_initial ( SMF_CTX ( & main_state ), & states [ STATE_RUNNING ] );
682
681
683
682
while (1 ) {
684
683
err = task_wdt_feed (task_wdt_id );
@@ -726,9 +725,9 @@ int main(void)
726
725
}
727
726
728
727
/* State object updated, run SMF */
729
- err = STATE_RUN ( main_state );
728
+ err = smf_run_state ( SMF_CTX ( & main_state ) );
730
729
if (err ) {
731
- LOG_ERR ("STATE_RUN (), error: %d" , err );
730
+ LOG_ERR ("smf_run_state (), error: %d" , err );
732
731
SEND_FATAL_ERROR ();
733
732
734
733
return err ;
0 commit comments