Fix mbtk from v1265 GSW
Change-Id: I5d8d395616f284bc74c8b9448cfa347164b5a668
diff --git a/mbtk/test/libgsw_lib/gsw_ota_test.c b/mbtk/test/libgsw_lib/gsw_ota_test.c
new file mode 100755
index 0000000..99531e9
--- /dev/null
+++ b/mbtk/test/libgsw_lib/gsw_ota_test.c
@@ -0,0 +1,385 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdint.h>
+#include <signal.h>
+#include <pthread.h>
+#include <stdbool.h>
+#include <dlfcn.h>
+
+typedef struct
+{
+ int cmdIdx;
+ char *funcName;
+}st_api_test_case;
+
+
+
+typedef enum
+{
+ GSW_OTA_SUCCESS,
+ GSW_OTA_FAILURE,
+ GSW_OTA_TIMEOUT,
+ GSW_OTA_INPROCESS,
+ GSW_OTA_NO_TASK
+}E_GSW_OTA_RET;
+
+typedef enum _gsw_ota_ret
+{
+ GSW_OTA_SYSTEM_A,
+ GSW_OTA_SYSTEM_B,
+}E_GSW_OTA_SYSTEM;
+
+
+typedef enum
+{
+ GSW_UPDATE_SUCCEED = 0, //update succeed
+ GSW_UPDATE_INPROGRESS, //update in progress
+ GSW_UPDATE_BACKUP, //A/B partition sync in progress
+ GSW_UPDATE_FAILED, //update failed
+ GSW_UPDATE_WAITEDONE, //update in-active part finished,not switch update part.
+ GSW_UPDATE_NEEDSYNC, //switch update part, need sync A/B part
+ GSW_UPDATE_CANCEL //updata cancel success
+}gsw_update_state_t;
+
+typedef enum
+{
+ GSW_UPDATE_NOERROR=0, //升级成功
+ GSW_UPDATE_ARGUMENTERROR, //升级程序启动参数错误
+ GSW_UPDATE_SDCARDNOEXIST, //未挂载外置FLASH等存储设备
+ GSW_UPDATE_PACKAGENOEXIST, //升级包不存在
+ GSW_UPDATE_UNZIPFAILED, //解压升级包出错
+ GSW_UPDATE_PARTITIONFLUSHERROR,//写入分区出错
+ GSW_UPDATE_XMLPARSEERROR, //解析 fotaconfig.xml 文件出错
+ GSW_UPDATE_DIFFUBIUNATTACH, //差分升级 UBI 分区挂载异常
+ GSW_UPDATE_NOSPACELEFT, //空间不足
+ GSW_UPDATE_FILECHECKFAILED, //MD5 值校验失败
+ GSW_UPDATE_BSPATCHFAILED, //bspatch 合成新文件夹失败
+ GSW_UPDATE_NOFINDPARTITION, //待升级分区不存在
+ GSW_UPDATE_UBIVOLUMEERROR, //差分升级,待升级 UBI 卷不存在
+ GSW_UPDATE_NOFOTACONFIGFILE, //升级包中无 fotaconfig.xml 文件
+ GSW_UPDATE_GETOLDSOFTWAREFAILED,//读取原始版本固件失败
+ GSW_UPDATE_FILENOTEXIST, //文件不存在
+ GSW_UPDATE_UPGRADECANCELED, //升级或分区同步被取消
+ GSW_UPDATE_NONEEDCANCEL, //取消升级失败
+ GSW_UPDATE_NOGOING //升级或分区同步正在进行,不可重复操作
+}gsw_update_exit_code_t;
+
+
+typedef struct
+{
+ unsigned int percentage; //update progress0-100
+ gsw_update_state_t update_state;
+ gsw_update_exit_code_t exit_code;
+}gsw_update_info_s;
+
+typedef struct
+{
+ gsw_update_state_t update_state;
+ uint8_t is_damaged; //TURE: damaged FALSE:no damaged
+ uint8_t damaged_partname[16];
+}gsw_system_status_s;
+
+typedef int32_t (*gsw_update_modem_start_autobackup)(char* file_path);
+typedef bool (*gsw_update_modem_check_condition)(void);
+typedef E_GSW_OTA_RET (*gsw_update_modem_result_query)(void);
+typedef int32_t (*gsw_update_modem_start_nobackup)(char* file_path);
+typedef E_GSW_OTA_SYSTEM (*gsw_update_modem_get_system)(void);
+typedef int32_t (*gsw_update_modem_cancel)(void);
+typedef int32_t (*gsw_update_modem_get_info)(gsw_update_info_s *update_info);
+typedef int32_t (*gsw_update_modem_get_status)(gsw_system_status_s *system_status);
+typedef int32_t (*gsw_update_modem_sync)(void);
+typedef int32_t (*gsw_update_modem_switch)(void);
+
+gsw_update_modem_start_autobackup gsw_update_modem_start_autobackup_ptr = NULL;
+
+static void *ota_handle = NULL;
+
+st_api_test_case api_testcases[] =
+{
+ {0, "print_help"},
+ {1, "gsw_update_modem_start_autobackup"},
+ {2, "gsw_update_modem_check_condition"},
+ {3, "gsw_update_modem_result_query"},
+ {4, "gsw_update_modem_get_system"},
+ {5, "gsw_update_modem_get_info"},
+ {6, "gsw_update_modem_get_status"},
+ {7, "gsw_update_modem_sync"},
+ {8, "gsw_update_modem_switch"},
+ {9, "gsw_update_modem_start_nobackup"},
+ {10, "gsw_update_modem_cancel"},
+ {-1, NULL}
+
+};
+
+void print_help(void)
+{
+ int i;
+
+ printf("Supported test cases:\n");
+ for(i = 0; ; i++)
+ {
+ if(api_testcases[i].cmdIdx == -1)
+ {
+ break;
+ }
+ printf("%d:\t%s\n", api_testcases[i].cmdIdx, api_testcases[i].funcName);
+ }
+}
+
+void *fota_thread(void *arg)
+{
+ char *file_path = (char *)arg;
+ int ret = -1;
+ ret = gsw_update_modem_start_autobackup_ptr(file_path);
+ printf("gsw_update_modem_start_autobackup ret = %d\n", ret);
+ return NULL;
+}
+
+void sigint_handler(int sig)
+{
+ printf("sigint_handler\n");
+ dlclose(ota_handle);
+ ota_handle = NULL;
+ gsw_update_modem_start_autobackup_ptr = NULL;
+ exit(0);
+}
+void clear_input_buffer()
+{
+ int c;
+
+ while ((c = getchar()) != '\n' && c != EOF);
+}
+
+int main(int argc,char *argv[])
+{
+ gsw_update_modem_check_condition gsw_update_modem_check_condition_ptr = NULL;
+ gsw_update_modem_result_query gsw_update_modem_result_query_ptr = NULL;
+ gsw_update_modem_get_system gsw_update_modem_get_system_ptr = NULL;
+ gsw_update_modem_get_info gsw_update_modem_get_info_ptr = NULL;
+ gsw_update_modem_get_status gsw_update_modem_get_status_ptr = NULL;
+ gsw_update_modem_sync gsw_update_modem_sync_ptr = NULL;
+ gsw_update_modem_switch gsw_update_modem_switch_ptr = NULL;
+ gsw_update_modem_start_nobackup gsw_update_modem_start_nobackup_ptr = NULL;
+ gsw_update_modem_cancel gsw_update_modem_cancel_ptr = NULL;
+
+ signal(SIGINT, sigint_handler);
+ if (argc < 2)
+ {
+ printf("Usage: %s <file_path>\n", argv[0]);
+ return -1; // 确保提供了文件路径
+ }
+ char *file_path = argv[1];
+ ota_handle = dlopen("/lib/libgsw_lib.so", RTLD_NOW );
+ if(ota_handle == NULL)
+ {
+ printf("open lib failed\n");
+ return -1;
+ }
+
+ gsw_update_modem_start_autobackup_ptr = (gsw_update_modem_start_autobackup)dlsym(ota_handle, "gsw_update_modem_start_autobackup");
+ if(gsw_update_modem_start_autobackup_ptr == NULL)
+ {
+ printf("dlsym gsw_update_modem_start_autobackup failed\n");
+ return -1;
+ }
+
+ gsw_update_modem_check_condition_ptr = (gsw_update_modem_check_condition)dlsym(ota_handle, "gsw_update_modem_check_condition");
+ if(gsw_update_modem_check_condition_ptr == NULL)
+ {
+ printf("dlsym gsw_update_modem_check_condition failed\n");
+ return -1;
+ }
+
+ gsw_update_modem_result_query_ptr = (gsw_update_modem_result_query)dlsym(ota_handle, "gsw_update_modem_result_query");
+ if(gsw_update_modem_result_query_ptr == NULL)
+ {
+ printf("dlsym gsw_update_modem_result_query failed\n");
+ return -1;
+ }
+
+ gsw_update_modem_get_system_ptr = (gsw_update_modem_get_system)dlsym(ota_handle, "gsw_update_modem_get_system");
+ if(gsw_update_modem_get_system_ptr == NULL)
+ {
+ printf("dlsym gsw_update_modem_get_system failed\n");
+ return -1;
+ }
+
+ gsw_update_modem_get_info_ptr = (gsw_update_modem_get_info)dlsym(ota_handle, "gsw_update_modem_get_info");
+ if(gsw_update_modem_get_info_ptr == NULL)
+ {
+ printf("dlsym gsw_update_modem_get_info failed\n");
+ return -1;
+ }
+
+ gsw_update_modem_get_status_ptr = (gsw_update_modem_get_status)dlsym(ota_handle, "gsw_update_modem_get_status");
+ if(gsw_update_modem_get_status_ptr == NULL)
+ {
+ printf("dlsym gsw_update_modem_get_status failed\n");
+ return -1;
+ }
+
+ gsw_update_modem_sync_ptr = (gsw_update_modem_sync)dlsym(ota_handle, "gsw_update_modem_sync");
+ if(gsw_update_modem_sync_ptr == NULL)
+ {
+ printf("dlsym gsw_update_modem_sync failed\n");
+ return -1;
+ }
+
+ gsw_update_modem_switch_ptr = (gsw_update_modem_switch)dlsym(ota_handle, "gsw_update_modem_switch");
+ if(gsw_update_modem_switch_ptr == NULL)
+ {
+ printf("dlsym gsw_update_modem_switch failed\n");
+ return -1;
+ }
+
+ gsw_update_modem_start_nobackup_ptr = (gsw_update_modem_start_nobackup)dlsym(ota_handle, "gsw_update_modem_start_nobackup");
+ if(gsw_update_modem_start_nobackup_ptr == NULL)
+ {
+ printf("dlsym gsw_update_modem_start_nobackup failed\n");
+ return -1;
+ }
+
+ gsw_update_modem_cancel_ptr = (gsw_update_modem_cancel)dlsym(ota_handle, "gsw_update_modem_cancel");
+ if(gsw_update_modem_cancel_ptr == NULL)
+ {
+ printf("dlsym gsw_update_modem_cancel failed\n");
+ return -1;
+ }
+
+
+
+ printf("Enter ota api test \n");
+ int opt = -1;
+ print_help();
+ while (1)
+ {
+ char buffer[100]; // 用于存储输入的缓冲区
+
+ printf("请输入选项: \n");
+ if (fgets(buffer, sizeof(buffer), stdin) != NULL)
+ {
+
+ if (sscanf(buffer, "%d", &opt) != 1)
+ {
+ printf("无效输入,请输入一个整数。\n");
+ clear_input_buffer();
+ continue;
+ }
+ }
+ else
+ {
+
+ clear_input_buffer();
+ continue;
+ }
+
+ printf("输入的整数是:%d\n", opt);
+
+ switch(opt)
+ {
+ case 0 :
+ {
+ print_help();
+ break;
+ }
+ case 1 :
+ {
+ int32_t ret = -1;
+ pthread_t thread_id_reboot;
+ ret = pthread_create(&thread_id_reboot, NULL, fota_thread, (void*)file_path);
+ if (ret != 0)
+ {
+ printf("pthread_create failed \n");
+ return -1;
+ }
+ break;
+
+ }
+ case 2 :
+ {
+ bool ret = false;
+ ret = gsw_update_modem_check_condition_ptr();
+ printf("gsw_update_modem_check_condition ret = %d\n", ret);
+ break;
+ }
+ case 3 :
+ {
+ E_GSW_OTA_RET ret = -1;
+ ret = gsw_update_modem_result_query_ptr();
+ printf("gsw_update_modem_result_query ret = %d\n", ret);
+ break;
+ }
+ case 4 :
+ {
+ E_GSW_OTA_SYSTEM ret = -1;
+ ret = gsw_update_modem_get_system_ptr();
+ printf("gsw_update_modem_get_system ret = %d\n", ret);
+ printf("system %c\n", ret == 0? 'a' : 'b');
+
+ break;
+ }
+ case 5 :
+ {
+ int32_t ret = -1;
+ gsw_update_info_s update_info = {0};
+ ret = gsw_update_modem_get_info_ptr(&update_info);
+ printf("gsw_update_modem_get_info ret = %d\n", ret);
+
+ printf("update_info. = %u\n",update_info.percentage);
+ printf("update_state. = %d\n",update_info.update_state);
+ printf("exit_code. = %d\n",update_info.exit_code);
+
+ break;
+ }
+ case 6:
+ {
+ int32_t ret = -1;
+ gsw_system_status_s system_status = {0};
+ ret = gsw_update_modem_get_status_ptr(&system_status);
+ printf("gsw_update_modem_get_status ret is %d\n",ret);
+ break;
+
+ }
+ case 7:
+ {
+ int32_t ret = -1;
+ ret = gsw_update_modem_sync_ptr();
+ printf("gsw_update_modem_sync ret is %d\n",ret );
+ break;
+ }
+ case 8 :
+ {
+ int32_t ret = -1;
+ ret = gsw_update_modem_switch_ptr();
+ printf("gsw_update_modem_switch ret is %d \n",ret);
+ break;
+
+ }
+ case 9:
+ {
+ int32_t ret = -1;
+ ret = gsw_update_modem_start_nobackup_ptr(file_path);
+ printf("gsw_update_modem_start_nobackup ret is %d\n",ret);
+ break;
+ }
+ case 10:
+ {
+ int32_t ret = -1;
+ ret = gsw_update_modem_cancel_ptr();
+ printf("gsw_update_modem_cancel ret is %d\n",ret);
+ break;
+ }
+ default:
+ printf("invalid opt\n");
+ break;
+ }
+
+ }
+
+
+ return 0;
+
+
+}
+