#if defined(CONFIG_OTA_UPDATE_SUPPORT) && defined(ENABLE_UIKIT)
if (upg_check_upgrade_need_upgrade())
{
+ boot_animation_init();
ShowGraphicOTALogo();
}else{
+ boot_animation_init();
ShowGraphicLogo();
}
#else
#ifdef ENABLE_UIKIT
+ boot_animation_init();
ShowGraphicLogo();
#endif
\r
ble_aging_t aging_t;\r
\r
-static osTimerId_t g_ble_vibrator_timer;\r
+static osTimerId_t g_ble_vibrator_timer = NULL;\r
\r
-static osTimerId_t g_ble_acc_timer;\r
+static osTimerId_t g_ble_acc_timer = NULL;\r
\r
-static osTimerId_t g_ble_hrs_timer;\r
-static osTimerId_t g_ble_spo2_timer;\r
+static osTimerId_t g_ble_hrs_timer = NULL;\r
+static osTimerId_t g_ble_spo2_timer = NULL;\r
\r
-static osTimerId_t g_ble_microhone_timer;\r
-static osTimerId_t g_ble_spk_timer;\r
+static osTimerId_t g_ble_microhone_timer = NULL;\r
+static osTimerId_t g_ble_spk_timer = NULL;\r
\r
static uint32_t aging_time = 0;\r
\r
+static uint8_t pwr_button_result = 0;\r
+static uint8_t func_button_result = 1;\r
+\r
static int CRC16_XMODEM(uint8_t *bytes,uint16_t length) {\r
int crc = 0x0000; // initial value\r
int polynomial = 0x1021;\r
\r
static void pwr_button_callback_press(void)\r
{\r
- uint8_t send_data = 1;\r
-\r
- factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST,\r
- BLE_TEST_CMD_SOFT_TEST_SUB_MODE_KEY,\r
- 0x02,\r
- &send_data,\r
- 1);\r
+ pwr_button_result = 1;\r
}\r
static void pwr_button_callback_click_2(void)\r
{\r
- uint8_t send_data = 3;\r
-\r
- factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST,\r
- BLE_TEST_CMD_SOFT_TEST_SUB_MODE_KEY,\r
- 0x02,\r
- &send_data,\r
- 1);\r
+ pwr_button_result = 3;\r
}\r
static void pwr_button_callback_long_press_2s(void)\r
{\r
- uint8_t send_data = 2;\r
-\r
- factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST,\r
- BLE_TEST_CMD_SOFT_TEST_SUB_MODE_KEY,\r
- 0x02,\r
- &send_data,\r
- 1);\r
+ pwr_button_result = 2;\r
}\r
\r
static void func_button_callback_press(void)\r
{\r
- uint8_t send_data = 1;\r
-\r
- factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST,\r
- BLE_TEST_CMD_SOFT_TEST_SUB_MODE_KEY,\r
- 0x03,\r
- &send_data,\r
- 1);\r
+ func_button_result = 1;\r
}\r
static void func_button_callback_click_2(void)\r
{\r
- uint8_t send_data = 3;\r
-\r
- factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST,\r
- BLE_TEST_CMD_SOFT_TEST_SUB_MODE_KEY,\r
- 0x03,\r
- &send_data,\r
- 1);\r
+ func_button_result = 3;\r
}\r
static void func_button_callback_long_press_2s(void)\r
{\r
- uint8_t send_data = 2;\r
-\r
- factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST,\r
- BLE_TEST_CMD_SOFT_TEST_SUB_MODE_KEY,\r
- 0x03,\r
- &send_data,\r
- 1);\r
+ func_button_result = 2;\r
}\r
\r
void ble_vibrator_check_timer_callback(void)\r
6);\r
}\r
\r
-\r
void ble_hrs_check_timer_callback(void)\r
{\r
uint8_t databuf[4] = {0};\r
int32_t ppg_buf;\r
uint8_t i;\r
- if(ble_hrs_flag == 1)\r
+ if(ble_hrs_flag != 1)\r
+ return;\r
+ else\r
{\r
- ble_hrs_flag = 0;\r
osTimerStop(g_ble_hrs_timer);\r
osTimerDelete(g_ble_hrs_timer);\r
+ ble_hrs_flag = 0;\r
send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_STOP_PPG_TEST);\r
- return;\r
- }\r
\r
- if(ble_hrs_data > 10000)\r
- {\r
- ppg_buf = ble_hrs_data;\r
+ if(ble_hrs_data > 10000)\r
+ {\r
+ ppg_buf = ble_hrs_data;\r
\r
- databuf[0] = (uint8_t)((ppg_buf & 0xFF000000) >> 24);\r
- databuf[1] = (uint8_t)((ppg_buf & 0x00FF0000) >> 16);\r
- databuf[2] = (uint8_t)((ppg_buf & 0x0000FF00) >> 8);\r
- databuf[3] = (uint8_t)((ppg_buf & 0x000000FF) >> 0);\r
+ databuf[0] = (uint8_t)((ppg_buf & 0xFF000000) >> 24);\r
+ databuf[1] = (uint8_t)((ppg_buf & 0x00FF0000) >> 16);\r
+ databuf[2] = (uint8_t)((ppg_buf & 0x0000FF00) >> 8);\r
+ databuf[3] = (uint8_t)((ppg_buf & 0x000000FF) >> 0);\r
\r
- PRINT("%2X %2X %2X %2X \r\n",databuf[0],databuf[1],databuf[2],databuf[3]);\r
+ PRINT("%2X %2X %2X %2X \r\n",databuf[0],databuf[1],databuf[2],databuf[3]);\r
\r
- factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST,\r
- BLE_TEST_CMD_SOFT_TEST_SUB_MODE_HRS,\r
- 0x03,\r
- databuf,\r
- 4);\r
+ factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST,\r
+ BLE_TEST_CMD_SOFT_TEST_SUB_MODE_HRS,\r
+ 0x07,\r
+ databuf,\r
+ 4);\r
+ }\r
}\r
\r
}\r
uint8_t databuf[4] = {0};\r
int32_t red_buf;\r
\r
- if(ble_spo2_flag == 1)\r
+ if(ble_spo2_flag != 1)\r
+ return;\r
+ else\r
{\r
- ble_spo2_flag = 0;\r
osTimerStop(g_ble_spo2_timer);\r
osTimerDelete(g_ble_spo2_timer);\r
+ ble_spo2_flag = 0;\r
send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_STOP_SPO2_TEST);\r
- return;\r
- }\r
\r
- if(ble_spo2_data > 10000)\r
- {\r
- red_buf = ble_spo2_data;\r
+ if(ble_spo2_data > 10000)\r
+ {\r
+ red_buf = ble_spo2_data;\r
\r
- databuf[0] = (uint8_t)((red_buf & 0xFF000000) >> 24);\r
- databuf[1] = (uint8_t)((red_buf & 0x00FF0000) >> 16);\r
- databuf[2] = (uint8_t)((red_buf & 0x0000FF00) >> 8);\r
- databuf[3] = (uint8_t)((red_buf & 0x000000FF) >> 0);\r
+ databuf[0] = (uint8_t)((red_buf & 0xFF000000) >> 24);\r
+ databuf[1] = (uint8_t)((red_buf & 0x00FF0000) >> 16);\r
+ databuf[2] = (uint8_t)((red_buf & 0x0000FF00) >> 8);\r
+ databuf[3] = (uint8_t)((red_buf & 0x000000FF) >> 0);\r
\r
- PRINT("%2X %2X %2X %2X \r\n",databuf[0],databuf[1],databuf[2],databuf[3]);\r
+ PRINT("%2X %2X %2X %2X \r\n",databuf[0],databuf[1],databuf[2],databuf[3]);\r
\r
- factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST,\r
- BLE_TEST_CMD_SOFT_TEST_SUB_MODE_HRS,\r
- 0x04,\r
- databuf,\r
- 4);\r
+ factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST,\r
+ BLE_TEST_CMD_SOFT_TEST_SUB_MODE_HRS,\r
+ 0x08,\r
+ databuf,\r
+ 4);\r
+ }\r
}\r
\r
+\r
}\r
\r
void ble_microhone_check_timer_callback(void)\r
{\r
+ PRINT("ble_microhone_check_timer_callback \r\n");\r
uint8_t send_data= 0;\r
\r
uapi_microhone_switch(0);\r
\r
void ble_spk_check_timer_callback(void)\r
{\r
+ PRINT("ble_spk_check_timer_callback \r\n");\r
uint8_t send_data= 0;\r
\r
uapi_check_spk(0);\r
1);\r
} else if(testitem == 0x02)\r
{\r
- //查询电源键测试结果\r
+ //开启电源键测试\r
uint8_t send_data = 0;\r
\r
uapi_button_register_event_cb(pwr_button_callback_press, 1);\r
1);\r
} else if(testitem == 0x03)\r
{\r
- //查询功能键测试结果\r
+ //开启功能键测试\r
uint8_t send_data = 0;\r
\r
uapi_button_register_event_cb(func_button_callback_press, 24);\r
0x03,\r
&send_data,\r
1);\r
+ } else if(testitem == 0x04)\r
+ {\r
+ //查询电源键测试结果\r
+ uint8_t send_data = pwr_button_result;\r
+\r
+ factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST,\r
+ BLE_TEST_CMD_SOFT_TEST_SUB_MODE_KEY,\r
+ 0x04,\r
+ &send_data,\r
+ 1);\r
+ } else if(testitem == 0x05)\r
+ {\r
+ //查询功能键测试结果\r
+ uint8_t send_data = func_button_result;\r
+\r
+ factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST,\r
+ BLE_TEST_CMD_SOFT_TEST_SUB_MODE_KEY,\r
+ 0x05,\r
+ &send_data,\r
+ 1);\r
}\r
\r
break;\r
//LCD显示颜色\r
uint8_t send_data = 0x00;\r
char *color_buf[5] ={"0Xffff0000","0xff00ff00","0xff0000ff","0xffffffff","0xff000000"};\r
- ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON);\r
+ ScreenAlwaysOnCtr(1);\r
switch (*data)\r
{\r
case 1:\r
0x02,\r
&send_data,\r
1);\r
- } else if(testitem == 0x03)\r
+ } else if(testitem == 0x07)\r
{\r
//打开心率检测\r
g_ble_hrs_timer = osTimerNew((osTimerFunc_t)ble_hrs_check_timer_callback, osTimerPeriodic, NULL, NULL);\r
osTimerStart(g_ble_hrs_timer,400);\r
send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_DO_PPG_TEST);\r
\r
- } else if(testitem == 0x04)\r
+ } else if(testitem == 0x08)\r
{\r
//打开血氧检测\r
g_ble_spo2_timer = osTimerNew((osTimerFunc_t)ble_spo2_check_timer_callback, osTimerPeriodic, NULL, NULL);\r
uint8_t send_data[2] = {0};\r
uint16_t len = sizeof(send_data);\r
\r
- cat1_getsignal();\r
- msleep(1000);\r
- send_data[1]=uapi_dev_runtime_get_cat1_simstat();\r
+ send_data[1] = uapi_dev_runtime_get_cat1_simstat();\r
factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST,\r
BLE_TEST_CMD_SOFT_TEST_SUB_MODE_CAT1,\r
0x03,\r
//查看信号强度\r
uint8_t send_data[2] = {0};\r
\r
- cat1_getsignal();\r
- msleep(1000);\r
- send_data[1]=uapi_dev_runtime_get_cat1_signal();\r
+ send_data[1] = uapi_dev_runtime_get_cat1_signal();\r
\r
factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST,\r
BLE_TEST_CMD_SOFT_TEST_SUB_MODE_CAT1,\r
} else if(testitem == 0x05)\r
{\r
//查看网络类型\r
- uint8_t send_data = 0x00;\r
+ uint8_t send_data[2] = {0};\r
\r
cat1_getsignal();\r
msleep(1000);\r
\r
- \r
- PRINT("send_buf : %s \r\n",uapi_dev_runtime_get_cat1_operator());\r
- \r
+ send_data[1] = uapi_dev_runtime_get_cat1_networtype();\r
+ \r
factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST,\r
BLE_TEST_CMD_SOFT_TEST_SUB_MODE_CAT1,\r
0x05,\r
- (uint8_t *)uapi_dev_runtime_get_cat1_operator(),\r
- strlen(uapi_dev_runtime_get_cat1_operator()));\r
+ send_data,\r
+ 2);\r
} else if(testitem == 0x06)\r
{\r
//拨打电话\r
if(testitem == 0x01)\r
{\r
//开始录音\r
- g_ble_microhone_timer = osTimerNew((osTimerFunc_t)ble_microhone_check_timer_callback, osTimerPeriodic, NULL, NULL);\r
- osTimerStart(g_ble_microhone_timer,5000);\r
uapi_microhone_switch(1);\r
+ g_ble_microhone_timer = osTimerNew((osTimerFunc_t)ble_microhone_check_timer_callback, osTimerPeriodic, NULL, NULL);\r
+ osStatus_t ret = osTimerStart(g_ble_microhone_timer,5000);\r
\r
} else if(testitem == 0x02)\r
{\r
//播放录音\r
- g_ble_microhone_timer = osTimerNew((osTimerFunc_t)ble_spk_check_timer_callback, osTimerPeriodic, NULL, NULL);\r
- osTimerStart(g_ble_spk_timer,5000);\r
uapi_check_spk(1);\r
+ g_ble_spk_timer = osTimerNew((osTimerFunc_t)ble_spk_check_timer_callback, osTimerPeriodic, NULL, NULL);\r
+ osTimerStart(g_ble_spk_timer,5000);\r
}\r
break;\r
\r
#define BLE_TEST_CMD_SOFT_TEST_SUB_MODE_EXTRAM 0x19
//软件测试 子模式ID CAT1
#define BLE_TEST_CMD_SOFT_TEST_SUB_MODE_CAT1 0x1A
+//软件测试 子模式ID SPEAKER
+#define BLE_TEST_CMD_SOFT_TEST_SUB_MODE_SPEAKER 0x1B
//软件测试 子模式ID 通讯录
#define BLE_TEST_CMD_SOFT_TEST_SUB_MODE_CONTACTS 0x30
//软件测试 子模式ID 支付宝
#define BLE_TEST_CMD_SOFT_TEST_SUB_MODE_ALIPAY 0x31
-//软件测试 子模式ID SPEAKER
-#define BLE_TEST_CMD_SOFT_TEST_SUB_MODE_SPEAKER 0x32
+
/**
*
* encode cmd msg string and send to ble
{
CWM_OS_dbgPrintf("CUSTOM_OFFBODY_DETECT !!! \r\n");
if((int)sensorEVT->fData[2] == 1)
- send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_DO_WEAR_MODE_TEST);
+ {
+ set_keep_in_wear_det_mode(1);
+ send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_DO_WEAR_MODE_TEST);
+ }
else
+ {
send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_STOP_WEAR_MODE_TEST);
+ set_keep_in_wear_det_mode(0);
+ }
}
if((int)sensorEVT->fData[1] == CUSTOM_ON_CHARGING)
cywee_activity_mode_change(SPORT_ACTIVE_MODE_NORMAL);
- cywee_inactivity_mode_change(INACTIVITY_MODE_SEDENTARY);
+ //cywee_inactivity_mode_change(INACTIVITY_MODE_SEDENTARY);
//cywee_inactivity_mode_change(INACTIVITY_MODE_SLEEPING);
return;\r
}\r
\r
- for(ii = 0; ii < hrs_s_dat.count; ii++)\r
- {\r
- if(PPG_buf[ii] > 10000)\r
- {\r
- ble_hrs_data = PPG_buf[ii];\r
- }\r
- }\r
- \r
#ifndef GSEN_40MS_TIMMER\r
//readFifoByHrsModule();\r
#endif\r
gsen_fifo_y_send[ii] = gsensordata[ii].y * 2048;\r
gsen_fifo_z_send[ii] = gsensordata[ii].z * 2048;\r
}\r
+\r
+ if(abs(PPG_buf[ii]) > 10000)\r
+ ble_hrs_data = abs(PPG_buf[ii]);\r
+\r
//PRINT("hxdata:%d/%d %d %d %.3f %.3f %.3f %d\r\n" ,1+ii,*count,PPG_buf[ii],ir_buf[0],gsen_fifo_x_send[ii],gsen_fifo_y_send[ii],gsen_fifo_z_send[ii],ppg_s_data.green_cur);\r
PRINT("hxdata:%d/%d %d %d %d %d %d %d\r\n" ,1+ii,*count,PPG_buf[ii],ir_buf[0],gsen_fifo_x_send[ii],gsen_fifo_y_send[ii],gsen_fifo_z_send[ii],ppg_s_data.green_cur);\r
\r
{\r
return;\r
}\r
- \r
- for(ii = 0; ii < hrs_s_dat.count; ii++)\r
- {\r
- if(red_buf[ii] > 10000)\r
- {\r
- ble_spo2_data = red_buf[ii];\r
- }\r
- }\r
- \r
- \r
+ \r
#ifndef GSEN_40MS_TIMMER\r
// readFifoByHrsModule();\r
#endif\r
gsen_fifo_z_send[ii] = gsensordata[ii].z * 2048;\r
}\r
\r
+ if(abs(red_buf[ii]) > 10000)\r
+ ble_spo2_data = abs(red_buf[ii]) ;\r
+\r
PRINT("hxdata:%d/%d %d %d %d %d %d %d\r\n",\r
1+ii,*count,red_buf[ii],ir_buf[ii],green_buf[ii],gsen_fifo_x_send[ii],gsen_fifo_y_send[ii],gsen_fifo_z_send[ii]);\r
//printf("FFF==>spo2 red_buf : %d, %d, %d, %d \n", 1+ii, *count, red_buf[ii], ir_buf[0]);\r
static bool ppg_sensor_exist = false;
static uint8_t wear_mode_state = 0;
-static uint8_t keep_in_wear_det_mod = 1; //持续坚持 佩戴检测模式
+static uint8_t keep_in_wear_det_mod = 0; //持续坚持 佩戴检测模式
void set_keep_in_wear_det_mode(uint8_t mod)
#endif
}
-void uapi_efuse_test(void)
+void uapi_efuse_test_write(uint8_t *data,uint32_t byte_number,uint8_t len)
{
- uint8_t writedata[8] = {1,2,3,4,5,6,7,8};
- uint8_t readdata[8] = {0};
+ uint8_t readdata[10] = {0};
+ errcode_t ret = 0;
- uapi_efuse_write_buffer(0x170, writedata, 8);
+ PRINT("byte_number : %d \r\n",byte_number);
- uapi_efuse_read_buffer(readdata, 0x170, 8);
- for(int i = 0; i < 8; i++)
- PRINT("readdata[%d] : %d \r\n",i,readdata[i]);
+ for(int i = 0; i < len; i++)
+ PRINT("write_data[%d] : %d \r\n",i,data[i]);
+ ret = uapi_efuse_write_buffer(byte_number, data, len);
+ if(ret != ERRCODE_SUCC)
+ PRINT("uapi_efuse_write_buffer failed \r\n");
+
+ ret = uapi_efuse_read_buffer(readdata, byte_number, len);
+ if(ret != ERRCODE_SUCC)
+ PRINT("uapi_efuse_read_buffer failed \r\n");
+ for(int i = 0; i < len; i++)
+ PRINT("read_data[%d] : %d \r\n",i,readdata[i]);
+}
+
+void uapi_efuse_test_read(uint32_t byte_number,uint8_t len)
+{
+ uint8_t readdata[10] = {0};
+ errcode_t ret = 0;
+
+ PRINT("byte_number : %d \r\n",byte_number);
+
+ ret = uapi_efuse_read_buffer(readdata, byte_number, len);
+ if(ret != ERRCODE_SUCC)
+ PRINT("uapi_efuse_read_buffer failed \r\n");
+
+ for(int i = 0; i < len; i++)
+ PRINT("read_data[%d] : %d \r\n",i,readdata[i]);
}
\ No newline at end of file
void uapi_microhone_switch(bool isopen);
void uapi_check_spk(bool isopen);
-void uapi_efuse_test(void);
+void uapi_efuse_test_write(uint8_t *data,uint32_t byte_number,uint8_t len);
+void uapi_efuse_test_read(uint32_t byte_number,uint8_t len);
+
#include "custom_utilscpp.h"
return ERRCODE_SUCC;
}
-static uint32_t custom_uapi_efuse_test(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
+static uint32_t custom_uapi_efuse_test_write(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
{
UNUSED(strCommonCmd);
+ uint8_t argv[CUSTOM_UTILS_MAX_ARGC][CUSTOM_UTILS_MAX_ARGV_LEN] = { 0 };
+ uint32_t argc = 0;
+ uint8_t send_data[8] = {0};
- uapi_efuse_test();
+
+ int ret = ConvertCmdToParam(para, paraLen, argv, &argc);
+ if (ret != CUSTOM_UTILS_SUCCESS) {
+ PRINT("CUSTOM_UTILSTEST ATCMD Convert Command Failed\n");
+ return ERRCODE_FAIL;
+ }
+
+ if (argc != 3) {
+ PRINT("CUSTOM_UTILSTEST power_test ATCMD Set Parameter Failed argc %d\r\nPM_DSP_POWER_UP_AND_RUN=2 PM_DSP_POWER_OFF=3\r\n",argc);
+ return ERRCODE_FAIL;
+ }
+
+ uint32_t add = atol((char*)argv[1]);
+ uint8_t len = atol((char*)argv[2]);
+
+ for(int i = 0; i < len; i++)
+ {
+ if(argv[0][i] >=65)
+ argv[0][i] = argv[0][i] - 65 + 10;
+ else
+ argv[0][i] = argv[0][i] - 48;
+
+ send_data[i] = argv[0][i];
+ }
+
+ uapi_efuse_test_write(send_data,add,len);
+ //uapi_boot_animotion_test();
return ERRCODE_SUCC;
}
+static uint32_t custom_uapi_efuse_test_read(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
+{
+
+ UNUSED(strCommonCmd);
+
+ uint8_t argv[CUSTOM_UTILS_MAX_ARGC][CUSTOM_UTILS_MAX_ARGV_LEN] = { 0 };
+ uint32_t argc = 0;
+
+ int ret = ConvertCmdToParam(para, paraLen, argv, &argc);
+ if (ret != CUSTOM_UTILS_SUCCESS) {
+ PRINT("CUSTOM_UTILSTEST ATCMD Convert Command Failed\n");
+ return ERRCODE_FAIL;
+ }
+
+ if (argc != 2) {
+ PRINT("CUSTOM_UTILSTEST power_test ATCMD Set Parameter Failed argc %d\r\nPM_DSP_POWER_UP_AND_RUN=2 PM_DSP_POWER_OFF=3\r\n",argc);
+ return ERRCODE_FAIL;
+ }
+ uint32_t add = atol((char*)argv[0]);
+ uint8_t len = atol((char*)argv[1]);
+ uapi_efuse_test_read(add,len);
+
+ return ERRCODE_SUCC;
+}
+
+
static const at_cmd_table_t g_custom_utils_cmd[] = {
{ (char *)"AT^CUSTOM_SN", custom_utils_setsn, (char *)"123456789ABCDEF2345678" },
{ (char *)"AT^CUSTOM_SN_REQ", custom_utils_getsn, (char *)" " },
{ (char *)"AT^TIMESYNC", custom_test_time_synct, (char *)" " },
{ (char *)"AT^24HOUR", custom_test_time_showtype, (char *)" " },
- { (char *)"AT^EFUSETEST", custom_uapi_efuse_test, (char *)" " },
+ { (char *)"AT^EFUSEREAD", custom_uapi_efuse_test_read, (char *)" " },
+ { (char *)"AT^EFUSEWRITE", custom_uapi_efuse_test_write, (char *)" " },
};
+
at_cmd_table_t *get_custom_utils_cmd_table(uint32_t *cmd_count)
{
*cmd_count = ARRAY_COUNT(g_custom_utils_cmd);
#include "common/screen.h"
#include "components/root_view.h"
#include "components/ui_image_view.h"
+#include "thread_init.h"
+#include "custom_utils.h"
+#include "components/ui_image_animator.h"
+#include "wearable_log.h"
#ifdef __cplusplus
extern "C" {
static OHOS::UIImageView* g_ota_logo = nullptr;
static OHOS::ImageInfo* g_ota_imgInfo = nullptr;
+static uint32_t *g_boot_animation_task_handle = NULL;
+
+static OHOS::UIViewGroup* group=nullptr;
+static OHOS::UIViewGroup* boot_group=nullptr;
+static OHOS::UIImageAnimatorView* ReBootImageAnimatorView=nullptr;
+static constexpr char *ReBootPaths = "/system/ReBoot/"; //开机图片路径
+static constexpr int16_t REBOOT_IMAGE_ANIMATOR_VIEW_NUM_FRAMES = 30; // 图片帧数
+static constexpr int16_t REBOOT_IMAGE_ANIMATOR_TIME = 150; // 图片更新间隔
+static OHOS::ImageAnimatorInfo ReBootImageInfo[REBOOT_IMAGE_ANIMATOR_VIEW_NUM_FRAMES]; // 开机图像的信息
+static constexpr int16_t REBOOT_IMAGE_ANIMATOR_VIEW_X = 0;
+static constexpr int16_t REBOOT_IMAGE_ANIMATOR_VIEW_Y = 0;
+static constexpr int16_t REBOOT_IMAGE_ANIMATOR_VIEW_W = 466;
+static constexpr int16_t REBOOT_IMAGE_ANIMATOR_VIEW_H = 466;
+const char **ReBootPathsArray{nullptr}; // 开机图片路径数组
+static OHOS::UIImageAnimatorView::AnimatorStopListener *bootStoplistener{nullptr};
+static bool boot_animation_flag = false;
+static app_task_definition_t taskcfg={0};
+
#ifdef QSPI_DISPLAY
#define IMAGE_OPEN_LOGO_PATH "/user/res/OPEN_LOGO_QSPI.bin"
#else
#define IMAGE_OPEN_LOGO_PATH "/system/KUMI_LOGO.bin"
-#define Z1_IMAGE_OPEN_LOGO_PATH "/system/z1bootlogo.bin"
#define IMAGE_OTA_LOGO_PATH "/system/OTAUpdata.bin"
-
#endif
+static void FreeImagePathsArray(const char **imagePaths, const int numImages)
+{
+ for (int i = 0; i < numImages; i++)
+ {
+ delete imagePaths[i];
+ imagePaths[i] = nullptr;
+ }
+}
+
+static void ClearAll(void)
+{
+ if(group!=nullptr)
+ {
+ OHOS::RootView::GetInstance()->Remove(group);
+ group->RemoveAll();
+
+ if (ReBootImageAnimatorView != nullptr)
+ {
+ delete ReBootImageAnimatorView;
+ ReBootImageAnimatorView = nullptr;
+ }
+
+ if(bootStoplistener!=nullptr)
+ {
+ delete bootStoplistener;
+ bootStoplistener = nullptr;
+ }
+
+ FreeImagePathsArray(ReBootPathsArray, REBOOT_IMAGE_ANIMATOR_VIEW_NUM_FRAMES);
+
+ delete group;
+ group = nullptr;
+ }
+}
+
+class BootAnimatorListener:public OHOS::UIImageAnimatorView::AnimatorStopListener
+{
+public:
+BootAnimatorListener(){}
+~BootAnimatorListener(){}
+
+private:
+ void OnAnimatorStop(OHOS::UIView &view)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OnAnimatorStop");
+
+ ClearAll();
+
+ errcode_t ret = uapi_terminate_thread(taskcfg.task_handle);
+
+ if(ret != ERRCODE_SUCC)
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"kill boot_animation_task failed %d!",ret);
+ else
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"kill boot_animation_task succed !");
+
+ //boot_group->SetVisible(false);
+ OHOS::RootView::GetInstance()->Remove(boot_group);
+ delete boot_group;
+ boot_group = nullptr;
+ boot_animation_flag = true;
+ }
+
+};
+
+
+static const char ** CreateImagePathsArray(const char *basePath, const char *fileExtension, int numImages)
+{
+ const char **imagePaths = new const char *[numImages];
+ char buffer[256];
+ for (int i = 0; i < numImages; i++)
+ {
+ if(i < 10)
+ snprintf(buffer, sizeof(buffer), "%s6S2400%d.%s", basePath, i , fileExtension);
+ else
+ snprintf(buffer, sizeof(buffer), "%s6S240%d.%s", basePath, i , fileExtension);
+ imagePaths[i] = strdup(buffer);
+ //WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP," imagePaths[%d] = %s ", i, imagePaths[i]);
+ }
+ return imagePaths;
+}
+
+bool ShowReBootAnimatorView()
+{
+ ReBootPathsArray = CreateImagePathsArray(ReBootPaths, "bin", REBOOT_IMAGE_ANIMATOR_VIEW_NUM_FRAMES);
+
+ if (ReBootImageAnimatorView == nullptr)
+ {
+ ReBootImageAnimatorView = new OHOS::UIImageAnimatorView();
+ if (ReBootImageAnimatorView == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "new ReBootImageAnimatorView fail");
+ return false;
+ }
+ for (uint8_t i = 0; i < REBOOT_IMAGE_ANIMATOR_VIEW_NUM_FRAMES; i++)
+ {
+ ReBootImageInfo[i].imagePath = (ReBootPathsArray[i]);
+ ReBootImageInfo[i].imageType = OHOS::IMG_SRC_FILE_PATH;
+ ReBootImageInfo[i].pos.x = REBOOT_IMAGE_ANIMATOR_VIEW_X;
+ ReBootImageInfo[i].pos.y = REBOOT_IMAGE_ANIMATOR_VIEW_Y;
+ ReBootImageInfo[i].width = REBOOT_IMAGE_ANIMATOR_VIEW_W;
+ ReBootImageInfo[i].height = REBOOT_IMAGE_ANIMATOR_VIEW_H;
+ }
+ ReBootImageAnimatorView->SetPosition(REBOOT_IMAGE_ANIMATOR_VIEW_X, REBOOT_IMAGE_ANIMATOR_VIEW_Y, REBOOT_IMAGE_ANIMATOR_VIEW_W, REBOOT_IMAGE_ANIMATOR_VIEW_H);
+ ReBootImageAnimatorView->SetStyle(OHOS::STYLE_BACKGROUND_COLOR, 0xffffffff);
+ ReBootImageAnimatorView->SetStyle(OHOS::STYLE_BACKGROUND_OPA, 0xff);
+ ReBootImageAnimatorView->SetImageAnimatorSrc(ReBootImageInfo, REBOOT_IMAGE_ANIMATOR_VIEW_NUM_FRAMES, 100);
+ ReBootImageAnimatorView->SetRepeat(false);
+ ReBootImageAnimatorView->SetRepeatTimes(1);
+
+ bootStoplistener = static_cast<OHOS::UIImageAnimatorView::AnimatorStopListener *>(new BootAnimatorListener());
+ if (bootStoplistener == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to Create bootStoplistener!!");
+ return false;
+ }
+ ReBootImageAnimatorView->SetAnimatorStopListener(bootStoplistener);
+ }
+
+
+ return true;
+}
+
+OHOS::UIViewGroup* ReBootAnimatorViewInit(void)
+{
+ bool ret;
+ group = new OHOS::UIViewGroup();
+ if (group == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP," group new fail");
+ return nullptr;
+ }
+ group->SetPosition(0, 0, OHOS::HORIZONTAL_RESOLUTION, OHOS::VERTICAL_RESOLUTION);
+ group->SetStyle(OHOS::STYLE_BACKGROUND_OPA, OHOS::OPA_OPAQUE);
+ ret = ShowReBootAnimatorView();
+
+ if (ret == false)
+ {
+ return nullptr;
+ }
+
+ group->Add(ReBootImageAnimatorView);
+ return group;
+}
+
static void UikitRTCCallBack(uintptr_t data)
{
(void)(data);
void HideGraphicLogo()
{
if (!g_showLogo) {
- return;
- }
- g_showLogo = false;
- OHOS::GraphicEventHandler::GetInstance()->PostGraphicEvent(
- [] {
- if (g_logo != nullptr) {
- OHOS::RootView::GetInstance()->Remove(g_logo);
- delete g_logo;
- g_logo = nullptr;
- OHOS::ImageCacheManager::GetInstance().UnloadSingleRes(IMAGE_OPEN_LOGO_PATH);
- g_imgInfo = nullptr;
- }
- },
- false);
+ return;
+ }
+
+ g_showLogo = false;
+ OHOS::GraphicEventHandler::GetInstance()->PostGraphicEvent(
+ [] {
+ if (g_logo != nullptr) {
+ OHOS::RootView::GetInstance()->Remove(g_logo);
+ delete g_logo;
+ g_logo = nullptr;
+ OHOS::ImageCacheManager::GetInstance().UnloadSingleRes(IMAGE_OPEN_LOGO_PATH);
+ g_imgInfo = nullptr;
+ }
+ },
+ false);
}
void HideGraphicOtaLogo()
},
false);
}
+
+static void boot_animation_task(void *arg)
+{
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "boot_animation_task start");
+ unused(arg);
+
+ boot_group = ReBootAnimatorViewInit();
+ if (boot_group == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP," boot_group nullptr fail");
+ return;
+ }
+
+ OHOS::GraphicEventHandler::GetInstance()->PostGraphicEvent(
+ [] {
+ OHOS::RootView::GetInstance()->Add(boot_group);
+ ReBootImageAnimatorView->Start();
+ },
+ false);
+
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "boot_animation_task end!!");
+}
+
void ShowGraphicLogo(void)
{
+ while(boot_animation_flag == false)
+ {
+ //WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ShowGraphicLogo : %d ",boot_animation_flag);
+ LOS_Mdelay(1);
+ }
if (g_showLogo) {
- return;
+ return;
}
g_showLogo = true;
g_logo = new OHOS::UIImageView();
- g_logo->SetPosition(0, 0, OHOS::Screen::GetInstance().GetWidth(), OHOS::Screen::GetInstance().GetHeight());
+ g_logo->SetPosition(0, 0, 466, 466);
g_logo->SetAutoEnable(false);
g_logo->SetResizeMode(OHOS::UIImageView::CENTER);
- g_imgInfo = OHOS::ImageCacheManager::GetInstance().LoadSingleRes(Z1_IMAGE_OPEN_LOGO_PATH);
- if (g_imgInfo == nullptr)
- g_imgInfo = OHOS::ImageCacheManager::GetInstance().LoadSingleRes(IMAGE_OPEN_LOGO_PATH);
+
+ g_imgInfo = OHOS::ImageCacheManager::GetInstance().LoadSingleRes(IMAGE_OPEN_LOGO_PATH);
g_logo->SetSrc(g_imgInfo);
+
OHOS::GraphicEventHandler::GetInstance()->PostGraphicEvent(
[] {
OHOS::RootView::GetInstance()->Add(g_logo);
OHOS::RootView::GetInstance()->Invalidate();
},
false);
+
}
+
void ShowGraphicOTALogo(void)
{
+ while(boot_animation_flag == false)
+ {
+ //WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ShowGraphicLogo : %d ",boot_animation_flag);
+ LOS_Mdelay(1);
+ }
if (g_showOtaLogo) {
return;
}
},
false);
}
+
+void boot_animation_init(void)
+{
+ //ShowGraphicLogo();
+
+ taskcfg.task_handle = g_boot_animation_task_handle;
+ taskcfg.attr.name="boot_animation_service";
+ taskcfg.attr.priority = TASK_PRIORITY_SDK;
+ taskcfg.attr.stack_size = 0x1000;
+ taskcfg.func = boot_animation_task;
+ taskcfg.use_mem = USE_EXTEND_MEM;
+
+ errcode_t ret=uapi_create_osThread_custom(&taskcfg);
+ if(ret != ERRCODE_SUCC)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"create boot_animation_task failed %d!",ret);
+ return ;
+ }
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"create boot_animation_task succed");
+}
+
#ifdef __cplusplus
};
#endif