[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