This is an automated email from the ASF dual-hosted git repository.

acassis pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx-apps.git

commit ee32ebda06635fcb10a0c2fb575f2f359b4c2bb0
Author: wangjianyu3 <[email protected]>
AuthorDate: Fri Dec 5 10:44:32 2025 +0800

    system/nxinit: Add subreason for sys.boot.reason
    
    init.rc
    
      on init && property:sys.boot.reason=watchdog,4
         ...
    
      on init && property:sys.boot.reason=bootloader|recovery|thermal
         ...
    
    Test
    
      cause->cause = BOARDIOC_RESETCAUSE_CPU_RWDT;
      cause->flag  = 4
      init_main: setprop key:sys.boot.reason value:watchdog,4
    
      cause->cause = BOARDIOC_RESETCAUSE_CPU_SOFT;
      cause->flag  = BOARDIOC_SOFTRESETCAUSE_ENTER_BOOTLOADER;
      init_main: setprop key:sys.boot.reason value:bootloader
    
    Signed-off-by: wangjianyu3 <[email protected]>
---
 system/nxinit/init.c | 20 +++++++++++++++-----
 1 file changed, 15 insertions(+), 5 deletions(-)

diff --git a/system/nxinit/init.c b/system/nxinit/init.c
index 95f95b1b2..1348c8c9d 100644
--- a/system/nxinit/init.c
+++ b/system/nxinit/init.c
@@ -27,7 +27,9 @@
 #include <nuttx/config.h>
 
 #include <errno.h>
+#include <inttypes.h>
 #include <poll.h>
+#include <stdio.h>
 #include <string.h>
 #include <sys/boardctl.h>
 #include <sys/param.h>
@@ -118,12 +120,10 @@ static int init_boot_reason(FAR struct action_manager_s 
*am)
       [BOARDIOC_RESETCAUSE_SYS_CHIPPOR] = "cold",
       [BOARDIOC_RESETCAUSE_SYS_RWDT]    = "watchdog",
       [BOARDIOC_RESETCAUSE_SYS_BOR]     = "undervoltage",
-      [BOARDIOC_RESETCAUSE_CORE_SOFT]   = "warm",
       [BOARDIOC_RESETCAUSE_CORE_DPSP]   = "warm",
       [BOARDIOC_RESETCAUSE_CORE_MWDT]   = "watchdog",
       [BOARDIOC_RESETCAUSE_CORE_RWDT]   = "watchdog",
       [BOARDIOC_RESETCAUSE_CPU_MWDT]    = "watchdog",
-      [BOARDIOC_RESETCAUSE_CPU_SOFT]    = "warm",
       [BOARDIOC_RESETCAUSE_CPU_RWDT]    = "watchdog",
       [BOARDIOC_RESETCAUSE_PIN]         = "powerkey",
       [BOARDIOC_RESETCAUSE_LOWPOWER]    = "lowpower",
@@ -142,7 +142,9 @@ static int init_boot_reason(FAR struct action_manager_s *am)
       [BOARDIOC_SOFTRESETCAUSE_THERMAL]                 = "thermal",
     };
 
+  char buf[CONFIG_SYSTEM_NXINIT_RC_LINE_MAX];
   struct boardioc_reset_cause_s reset;
+  FAR const char *value;
   int ret;
 
   memset(&reset, 0, sizeof(reset));
@@ -163,9 +165,17 @@ static int init_boot_reason(FAR struct action_manager_s 
*am)
       reset.flag = nitems(resetflag) - 1;
     }
 
-  return init_property_set(am->prop, "sys.boot.reason",
-                           reset.cause != BOARDIOC_RESETCAUSE_CPU_SOFT ?
-                           resetcause[reset.cause] : resetflag[reset.flag]);
+  if (resetcause[reset.cause])
+    {
+      sprintf(buf, "%s,%" PRIu32 "", resetcause[reset.cause], reset.flag);
+      value = buf;
+    }
+  else
+    {
+      value = resetflag[reset.flag];
+    }
+
+  return init_property_set(am->prop, "sys.boot.reason", value);
 }
 #else
 #  define init_boot_reason(am) (0)

Reply via email to