@@ -389,67 +389,63 @@ handle_reboot_orb(job_t *job)
389389 MAKE_ASSERTS (orb_mcu_main_JetsonToMcu_reboot_orb_tag );
390390
391391 uint32_t delay = msg -> payload .reboot_orb .force_reboot_timeout_s ;
392- orb_mcu_main_RebootOrb_BootBehavior behavior =
393- msg -> payload .reboot_orb .reboot_behavior ;
394392
395393 if (delay != 0 && (delay > 60 || delay < 10 )) {
396394 job_ack (orb_mcu_Ack_ErrorCode_RANGE , job );
397395 LOG_ERR ("Reboot with delay > 60s or < 10s: %u" , delay );
398396 } else {
399- int ret = RET_SUCCESS ;
400- // Persist the requested reboot behavior if explicitly set
401- // BOOT_REBOOT_NEXT (0 / default) means no change to the boot config
402- if (behavior ==
403- orb_mcu_main_RebootOrb_BootBehavior_BOOT_BUTTON_PRESS_ALWAYS ) {
404- ret = config_set_reboot_behavior (BOOT_BUTTON );
405- if (ret != RET_SUCCESS ) {
406- LOG_ERR ("Failed to persist reboot behavior: %d" , ret );
407- }
408- } else if (behavior ==
409- orb_mcu_main_RebootOrb_BootBehavior_BOOT_AUTO_ALWAYS_ON ) {
410- ret = config_set_reboot_behavior (BOOT_ALWAYS );
411- if (ret != RET_SUCCESS ) {
412- LOG_ERR ("Failed to persist reboot behavior: %d" , ret );
397+ int ret =
398+ backup_regs_write_byte (REBOOT_FLAG_OFFSET_BYTE , REBOOT_INSTABOOT );
399+ if (ret == 0 ) {
400+ if (delay != 0 ) {
401+ // force reboot after `delay` seconds,
402+ // but a shutdown request from the Jetson is preferred
403+ // (SHUTDOWN_REQ gpio)
404+ ret = reboot (delay );
405+ } else {
406+ LOG_INF ("waiting for reboot request from Jetson" );
413407 }
414- } else if (behavior ==
415- orb_mcu_main_RebootOrb_BootBehavior_BOOT_REBOOT_NEXT ) {
416- // on BOOT_REBOOT_NEXT, we keep the next reboot state in bbram
417- // (won't persist in case of power loss)
418- ret = backup_regs_write_byte (REBOOT_FLAG_OFFSET_BYTE ,
419- REBOOT_INSTABOOT );
420- if (ret == 0 ) {
421- if (delay != 0 ) {
422- // force reboot after `delay` seconds,
423- // but a shutdown request from the Jetson is preferred
424- // (SHUTDOWN_REQ gpio)
425- ret = reboot (delay );
426- } else {
427- LOG_INF ("waiting for reboot request from Jetson" );
428- }
429408
430- if (ret == 0 ) {
409+ if (ret == 0 ) {
431410#ifdef CONFIG_MEMFAULT
432- MEMFAULT_REBOOT_MARK_RESET_IMMINENT (
433- kMfltRebootReason_JetsonRequestedRebootOrb );
411+ MEMFAULT_REBOOT_MARK_RESET_IMMINENT (
412+ kMfltRebootReason_JetsonRequestedRebootOrb );
434413#endif
435- job_ack (orb_mcu_Ack_ErrorCode_SUCCESS , job );
436- return ;
437- }
414+ job_ack (orb_mcu_Ack_ErrorCode_SUCCESS , job );
415+ return ;
438416 }
439- // failure setting flag or initiating reboot
440- // reset flag
441- backup_regs_write_byte (REBOOT_FLAG_OFFSET_BYTE , 0 );
442- } else {
443- ret = RET_ERROR_INVALID_PARAM ;
444417 }
418+ }
445419
446- if (ret == 0 ) {
420+ // failure setting flag or initiating reboot
421+ // reset flag
422+ backup_regs_write_byte (REBOOT_FLAG_OFFSET_BYTE , 0 );
423+ job_ack (orb_mcu_Ack_ErrorCode_FAIL , job );
424+ }
425+
426+ static void
427+ handle_set_config (job_t * job )
428+ {
429+ orb_mcu_main_JetsonToMcu * msg = & job -> message .jetson_cmd ;
430+ MAKE_ASSERTS (orb_mcu_main_JetsonToMcu_set_config_tag );
431+
432+ switch (msg -> payload .set_config .which_config ) {
433+ case orb_mcu_main_SetConfig_reboot_behavior_tag : {
434+ int ret = config_set_reboot_behavior (
435+ msg -> payload .set_config .config .reboot_behavior );
436+ if (ret == RET_SUCCESS ) {
447437 job_ack (orb_mcu_Ack_ErrorCode_SUCCESS , job );
448- } else if (ret == RET_ERROR_INVALID_PARAM ) {
449- job_ack (orb_mcu_Ack_ErrorCode_RANGE , job );
450438 } else {
439+ LOG_ERR ("Failed to persist reboot behavior: %d" , ret );
451440 job_ack (orb_mcu_Ack_ErrorCode_FAIL , job );
452441 }
442+ break ;
443+ }
444+ default :
445+ LOG_WRN ("Unknown config field: %u" ,
446+ msg -> payload .set_config .which_config );
447+ job_ack (orb_mcu_Ack_ErrorCode_RANGE , job );
448+ break ;
453449 }
454450}
455451
@@ -1824,6 +1820,7 @@ static const hm_callback handle_message_callbacks[] = {
18241820 [orb_mcu_main_JetsonToMcu_set_time_tag ] = handle_set_time ,
18251821 [orb_mcu_main_JetsonToMcu_reboot_orb_tag ] = handle_reboot_orb ,
18261822 [orb_mcu_main_JetsonToMcu_boot_complete_tag ] = handle_boot_complete ,
1823+ [orb_mcu_main_JetsonToMcu_set_config_tag ] = handle_set_config ,
18271824 [orb_mcu_main_JetsonToMcu_start_triggering_rgb_face_camera_tag ] =
18281825 handle_start_triggering_rgb_face_camera_message ,
18291826 [orb_mcu_main_JetsonToMcu_stop_triggering_rgb_face_camera_tag ] =
@@ -1846,7 +1843,7 @@ static const hm_callback handle_message_callbacks[] = {
18461843#endif
18471844};
18481845
1849- BUILD_ASSERT ((ARRAY_SIZE (handle_message_callbacks ) <= 56 ),
1846+ BUILD_ASSERT ((ARRAY_SIZE (handle_message_callbacks ) <= 57 ),
18501847 "It seems like the `handle_message_callbacks` array is too large" );
18511848
18521849_Noreturn static void
0 commit comments