[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/libgsw_lib/gsw_pm_interface.c b/mbtk/libgsw_lib/gsw_pm_interface.c
index 0d1aec4..517b134 100755
--- a/mbtk/libgsw_lib/gsw_pm_interface.c
+++ b/mbtk/libgsw_lib/gsw_pm_interface.c
@@ -104,13 +104,14 @@
         fun_ptr_log(LOG_ERR_LEVEL, "%s#%s: "GSW_PM"" fmt, ptr_1001 + 1, line_1001, ##args); \

     } while(0)

     

-

 #define LOCK_MAX_SIZE 129

 #define SDK_READY_CMD "uci get persist.mbtk.sdk__state"

+#define MBTK_REBOOT_REASON "uci get persist.mbtk.reboot_reason"

 #define CHECK_SYSTEM(cmd) do { \

     int _ret = system(cmd); \

     if (_ret == -1) perror("system error"); \

 } while(0)

+

 typedef void (*GSW_PM_WAKEUPCALLBACK)(int32_t wakeup_in);

 typedef void (*mbtk_lpm_handler_t)(int32_t wakeup_in);

 typedef void (*mbtk_log)(int level, const char *format,...);

@@ -121,6 +122,7 @@
 int (*mbtk_wakelock_unlock)(int);

 int (*mbtk_wakelock_destroy)(int);

 int (*mbtk_lpm_init)(mbtk_lpm_handler_t );

+

 int lock_fd = -1;

 

 typedef struct

@@ -391,6 +393,40 @@
     }

     return;

 }

+

+/**

+* @brief get Modem reset reason

+* @param [in]int32_t * reset_reason

+* @retval void

+*/

+int32_t gsw_get_modem_reset_reason(int32_t *reset_reason)

+{

+    char buf[8] = {0};

+    int value = -1;

+    FILE *fp = popen(MBTK_REBOOT_REASON, "r");

+    if(NULL == fp)

+    {

+        return GSW_HAL_NORMAL_FAIL;

+    }

+    memset(buf,0,sizeof(buf));

+    if(fgets(buf, sizeof(buf), fp) == NULL)

+    {

+        pclose(fp);

+        perror("fgets failed:");

+        return GSW_HAL_NORMAL_FAIL;

+    }

+    pclose(fp);

+    value = atoi(buf);   

+        

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

+    {

+        *reset_reason = (int32_t)value;

+        return GSW_HAL_SUCCESS;

+    }

+    return GSW_HAL_NORMAL_FAIL;

+}

+

+

 /**

  * @brief enable autosleep

  * @return int : 0 is success , other failed