[Feature][T108][task-view-1735]API to obtain the restart reason

Only Configure: No
Affected branch: GSW_V1453
Affected module: ALL
Is it affected on IC: only ASR
Self-test: yes
Doc Update: no

Change-Id: I2a61d883045432c9d3d663ad517f867a6269e452
diff --git a/mbtk/test/libgsw_lib/gsw_pm_test.c b/mbtk/test/libgsw_lib/gsw_pm_test.c
index 933cf9e..49e69d2 100755
--- a/mbtk/test/libgsw_lib/gsw_pm_test.c
+++ b/mbtk/test/libgsw_lib/gsw_pm_test.c
@@ -27,21 +27,31 @@
 int32_t (*gsw_pm_sdk_init)(GSW_PM_WAKEUPCALLBACK );

 int32_t (*gsw_pm_enter_sleep)(const char *gsw_wakelock_name);

 int32_t (*gsw_pm_exit_sleep)(const char *gsw_wakelock_name);

+int32_t (*gsw_get_modem_reset_reason)(int32_t *reset_reason); 

 void (*gsw_modem_log_sync)(void);

 

 const char *tmp_name = "pm_test_lock";

-

 void *dlHandle_pm;

 char *lynqLib_pm = "/lib/libgsw_lib.so";

 

-void user_help(void)

-{

+const char *reset_reason_str[] = {

+    "Normal",

+    "Download",

+    "Power Off",

+    "Hardware",

+    "Command",

+    "Abnormal",

+    "Unknown"

+};

+

+void user_help(void) {

     printf("\t1 autosleep_enable\n"

            "\t2 autosleep_disenable \n"

            "\t3 pm_sdk_init\n"

            "\t4 pm_enter_sleep\n"

            "\t5 pm_exit_sleep\n"

            "\t6 modem_log_sync\n"

+           "\t7 get_modem_reset_reason\n" 

            "please input operator: >> ");

 }

 

@@ -49,6 +59,7 @@
 {

     int ret;

     int opt = 0;

+    int32_t reset_reason = 0;

     dlHandle_pm = dlopen(lynqLib_pm, RTLD_NOW);

     while(1)

     {

@@ -126,7 +137,30 @@
             printf("gsw_modem_log_sync success.\n");

             return 0;

         }

+        case 7:

+        {

+            gsw_get_modem_reset_reason = (int32_t(*)(int32_t*))dlsym(dlHandle_pm, "gsw_get_modem_reset_reason");

+                if (!gsw_get_modem_reset_reason)

+                {

+                    fprintf(stderr, "dlsym error: %s\n", dlerror());

+                    break;

+                }

+                ret = gsw_get_modem_reset_reason(&reset_reason);

+

+                if (ret == 0)

+                {

+                    const char *reason = "Invalid Reason";

+                    if (reset_reason >= 0 && reset_reason <= 6)

+                    {

+                        reason = reset_reason_str[reset_reason];

+                    }

+                    printf("Modem reset reason: %d (%s)\n", reset_reason, reason);

+                } else {

+                    printf("Failed to get reset reason (error: %d)\n", ret);

+                }

+                break;

+        }

         }

     }

     return 0;

-}
\ No newline at end of file
+}