优化蓝牙产测,添加部分测试项,优化久坐提醒 230/1 230/head 231/target/1 232/target/1
authorpenglei <1624952103@qq.com>
Thu, 6 Jun 2024 13:13:47 +0000 (21:13 +0800)
committerpenglei <1624952103@qq.com>
Thu, 6 Jun 2024 13:13:47 +0000 (21:13 +0800)
14 files changed:
code/sdk/application/battery/service/battery_service.cpp
code/sdk/application/wearable/fd230app/nativeui/producttest/include/testspeakerC.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/producttest/src/testspeak.cpp
code/sdk/application/wearable/service/factorytest_service/factorytest_protocol.c
code/sdk/application/wearable/service/factorytest_service/factorytest_protocol.h
code/sdk/drivers/peripheral/cywee/CMakeLists.txt
code/sdk/drivers/peripheral/cywee/Inc/custom_factory.h [new file with mode: 0644]
code/sdk/drivers/peripheral/cywee/src/custom_factory_core.c [new file with mode: 0644]
code/sdk/drivers/peripheral/cywee/src/custom_factory_impl.c [new file with mode: 0644]
code/sdk/drivers/peripheral/cywee/src/main_dml.c
code/sdk/drivers/peripheral/ppg/hx3695/hx3695.c
code/sdk/drivers/peripheral/utils/custom_utils.c
code/sdk/drivers/peripheral/utils/custom_utils.h
code/sdk/drivers/peripheral/utils/custom_utils_at_cmd.c

index 06128c4..68c9191 100644 (file)
@@ -90,7 +90,7 @@ static unsigned long g_app_queue;
 
 static uint8_t g_check_count = 0;
 
-static int oncharging_status = 0;
+static int oncharging_status = -1;
 
 static void battery_check_timer_callback(void* data);
 errcode_t charger_plug_event_notify(uint8_t plugged);
diff --git a/code/sdk/application/wearable/fd230app/nativeui/producttest/include/testspeakerC.h b/code/sdk/application/wearable/fd230app/nativeui/producttest/include/testspeakerC.h
new file mode 100644 (file)
index 0000000..c2f411c
--- /dev/null
@@ -0,0 +1,16 @@
+#ifndef TEST_SPEAKERC_H
+#define TEST_SPEAKERC_H
+
+#ifdef __cplusplus
+#if __cplusplus
+extern "C"
+{
+#endif
+#endif
+    int check_speaker(bool isopen);
+#ifdef __cplusplus
+#if __cplusplus
+}
+#endif
+#endif
+#endif
index 5608cdc..75fa996 100644 (file)
@@ -228,4 +228,24 @@ namespace OHOS
         }
         return testSPEAKScrollView;
     }
-}
\ No newline at end of file
+
+    #ifdef __cplusplus
+#if __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */
+#endif /* __cplusplus */
+
+    int check_speaker(bool isopen)
+    {
+        if(isopen)
+            return AlarmClockModel::GetInstance()->AlarmPlayerStart();
+        else
+            return AlarmClockModel::GetInstance()->AlarmPlayerStop();
+    }
+#ifdef __cplusplus
+#if __cplusplus
+}
+#endif /* __cplusplus */
+#endif /* __cplusplus */
+}
index 32bddda..d4ced75 100644 (file)
@@ -74,9 +74,6 @@ static osTimerId_t g_ble_leaklight_timer;
 static uint8_t graycard_flag = 0;\r
 static uint8_t leaklight_flag = 0;\r
 \r
-static uint16_t cycle_time_ms = 200;\r
-static uint16_t duty = 20;\r
-\r
 static uint32_t aging_time = 0;\r
 \r
 static int CRC16_XMODEM(uint8_t *bytes,uint16_t length) {\r
@@ -129,7 +126,7 @@ errcode_t factorytest_protocol_replymsg(uint8_t mode, uint8_t submode,uint8_t te
 \r
 void ble_vibrator_check_timer_callback(void)\r
 {\r
-    vibrator_cyclicity(duty,cycle_time_ms,200);\r
+    uapi_vibrationModeSet(3);\r
 }\r
 \r
 void ble_acc_check_timer_callback(void)\r
@@ -193,7 +190,7 @@ void ble_spo2_check_timer_callback(void)
         return;\r
     }\r
 \r
-    if(ble_hrs_data > 10000)\r
+    if(ble_spo2_data > 10000)\r
     {\r
         red_buf = ble_spo2_data;\r
 \r
@@ -379,7 +376,7 @@ void aging_task(void)
         }\r
         PRINT("aging_t.mag_error : %d \r\n",aging_t.mag_error);\r
 \r
-        vibrator_cyclicity(20,200,2000);\r
+        uapi_vibrationModeSet(3);\r
         aging_t.motor_error = 0;\r
         PRINT("aging_t.motor_error : %d \r\n",aging_t.motor_error);\r
 \r
@@ -456,7 +453,23 @@ void factorytest_protocol_common_decode(uint8_t submode,uint8_t testitem,uint8_t
     switch(submode)\r
     {\r
         case BLE_TEST_CMD_COMMON_SUB_MODE_SYSTEM_VERSION:\r
-            if (testitem == 0x02)\r
+            if (testitem == 0x01)\r
+            {\r
+                \r
+                uint8_t send_data[4]={0};\r
+      \r
+                uint8_t _major,_mid,_minor;\r
+                uapi_get_fw_version(&_major,&_mid,&_minor);\r
+                send_data[1] = _major;\r
+                send_data[2] = _mid;\r
+                send_data[3] = _minor;\r
+\r
+                factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_COMMON,\r
+                        BLE_TEST_CMD_COMMON_SUB_MODE_SYSTEM_VERSION,\r
+                        0x01,\r
+                        send_data,\r
+                        4);\r
+            } else if (testitem == 0x02)\r
             {\r
                 //获取软件版本\r
                 uint8_t buildversion[128]={0};\r
@@ -474,7 +487,37 @@ void factorytest_protocol_common_decode(uint8_t submode,uint8_t testitem,uint8_t
 \r
             if(testitem == 0x01)\r
             {\r
-                //系统自检(未完成)\r
+                uint8_t send_data[2] = {0};\r
+                uint8_t id;\r
+                uint16_t tp_id;\r
+                uint32_t chip_id;\r
+                //系统自检\r
+                uapi_cywee_get_id(&id);\r
+                if(id != 0x44)\r
+                    send_data[1] |= 1 << 1;\r
+\r
+                touch_getid(&tp_id);\r
+                PRINT("touch_getid : %2X \r\n",tp_id);\r
+                if(tp_id != 0x6456)\r
+                    send_data[1] |= 1 << 4;\r
+\r
+                uapi_ppg_get_id(&id);\r
+                if(id != 0x65)\r
+                    send_data[1] |= 1 << 3;\r
+\r
+                lcd_getid(&chip_id);\r
+                if(chip_id != 0x1133)\r
+                    send_data[1] |= 1 << 5;\r
+\r
+                flash_getid(&chip_id);\r
+                if(chip_id == 0)\r
+                    send_data[1] |= 1 << 6;\r
+\r
+                factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_COMMON,\r
+                        BLE_TEST_CMD_COMMON_SUB_MODE_POWER_ON_OFF_DEVICE,\r
+                        0x01,\r
+                        send_data,\r
+                        2);\r
             }\r
 \r
             if(testitem == 0x02)\r
@@ -499,12 +542,26 @@ void factorytest_protocol_common_decode(uint8_t submode,uint8_t testitem,uint8_t
                         0x03,\r
                         &send_data,\r
                         1);\r
+            } else if(testitem == 0x04) \r
+            {\r
+                //进入ship mode\r
+                uint8_t send_data = 0x00;\r
+  \r
+                factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_COMMON,\r
+                        BLE_TEST_CMD_COMMON_SUB_MODE_POWER_ON_OFF_DEVICE,\r
+                        0x04,\r
+                        &send_data,\r
+                        1);\r
+                LOS_Mdelay(100);\r
+                uapi_sys_shipmode();\r
+\r
             } else if(testitem == 0x05)\r
             {\r
-                //恢复出厂设置(未完成)\r
+                //恢复出厂设置\r
                 uint8_t send_data = 0x00;\r
 \r
-                //bluetooth_factory_reset();\r
+                do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_TYPE_RESTORE_FACTORY_SETTING, NULL, 0);\r
+\r
                 factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_COMMON,\r
                         BLE_TEST_CMD_COMMON_SUB_MODE_POWER_ON_OFF_DEVICE,\r
                         0x05,\r
@@ -514,6 +571,32 @@ void factorytest_protocol_common_decode(uint8_t submode,uint8_t testitem,uint8_t
             break;\r
 \r
         case BLE_TEST_CMD_COMMON_SUB_MODE_POWERCONSUMPTION:\r
+            if(testitem == 0x01)\r
+            {\r
+                uint8_t send_data = 0x00;\r
+\r
+                power_on_cat1();\r
+                \r
+                factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_COMMON,\r
+                        BLE_TEST_CMD_COMMON_SUB_MODE_POWERCONSUMPTION,\r
+                        0x01,\r
+                        &send_data,\r
+                        1);\r
+            } else if(testitem == 0x02) \r
+            {\r
+                uint8_t send_data = 0x00;\r
+\r
+                send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_STOP_WEAR_MODE_TEST); \r
+                send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_STOP_SPO2_TEST); \r
+\r
+                power_off_cat1();\r
+\r
+                factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_COMMON,\r
+                        BLE_TEST_CMD_COMMON_SUB_MODE_POWERCONSUMPTION,\r
+                        0x02,\r
+                        &send_data,\r
+                        1);\r
+            }\r
             break;\r
 \r
         case BLE_TEST_CMD_COMMON_SUB_MODE_OTA:\r
@@ -597,7 +680,7 @@ void factorytest_protocol_soft_test_decode(uint8_t submode,uint8_t testitem,uint
 \r
                 g_ble_vibrator_timer = osTimerNew((osTimerFunc_t)ble_vibrator_check_timer_callback, osTimerPeriodic, NULL, NULL);\r
 \r
-                osTimerStart(g_ble_vibrator_timer,200);\r
+                osTimerStart(g_ble_vibrator_timer,1000);\r
                 \r
                 factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST,\r
                         BLE_TEST_CMD_SOFT_TEST_SUB_MODE_VIBRATOR,\r
@@ -610,8 +693,6 @@ void factorytest_protocol_soft_test_decode(uint8_t submode,uint8_t testitem,uint
                 //关闭马达\r
                 uint8_t send_data = 0x00;\r
 \r
-                cycle_time_ms = 200;\r
-                duty = 20;\r
                 osTimerStop(g_ble_vibrator_timer);\r
                 osTimerDelete(g_ble_vibrator_timer);\r
 \r
@@ -625,12 +706,9 @@ void factorytest_protocol_soft_test_decode(uint8_t submode,uint8_t testitem,uint
                 //打开周期性马达\r
                 uint8_t send_data = 0x00;\r
 \r
-                cycle_time_ms = data[1];\r
-                duty = data[0];\r
-\r
                 g_ble_vibrator_timer = osTimerNew((osTimerFunc_t)ble_vibrator_check_timer_callback, osTimerPeriodic, NULL, NULL);\r
 \r
-                osTimerStart(g_ble_vibrator_timer,200);\r
+                osTimerStart(g_ble_vibrator_timer,1000);\r
 \r
                 factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST,\r
                         BLE_TEST_CMD_SOFT_TEST_SUB_MODE_VIBRATOR,\r
@@ -885,7 +963,7 @@ void factorytest_protocol_soft_test_decode(uint8_t submode,uint8_t testitem,uint
                 }\r
                 factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST,\r
                         BLE_TEST_CMD_SOFT_TEST_SUB_MODE_LCD,\r
-                        0x04,\r
+                        *data,\r
                         &send_data,\r
                         1);\r
             } else if(testitem == 0x05)\r
@@ -923,6 +1001,18 @@ void factorytest_protocol_soft_test_decode(uint8_t submode,uint8_t testitem,uint
                         0x01,\r
                         tp_id,\r
                         3);\r
+            } else if(testitem == 0x02)\r
+            {\r
+                //触摸版本\r
+                uint8_t send_data = 0x01;\r
+\r
+                factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST,\r
+                        BLE_TEST_CMD_SOFT_TEST_SUB_MODE_TP,\r
+                        0x02,\r
+                        &send_data,\r
+                        1);\r
+\r
+                \r
             } else if(testitem == 0x03)\r
             {\r
                 //触摸测试\r
@@ -969,13 +1059,13 @@ void factorytest_protocol_soft_test_decode(uint8_t submode,uint8_t testitem,uint
         case BLE_TEST_CMD_SOFT_TEST_SUB_MODE_ACC:\r
             if(testitem == 0x01)\r
             {\r
-                //acc ID(未完成)\r
+                //acc ID\r
                 uint8_t acc_id[2] = {0};\r
-                acc_id[1] = 0x44;\r
+                uapi_cywee_get_id(&acc_id[1]);\r
                 factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST,\r
                         BLE_TEST_CMD_SOFT_TEST_SUB_MODE_ACC,\r
                         0x01,\r
-                        &acc_id,\r
+                        acc_id,\r
                         2);\r
 \r
             } else if(testitem == 0x04)\r
@@ -1233,8 +1323,7 @@ void factorytest_protocol_soft_test_decode(uint8_t submode,uint8_t testitem,uint
                 //打开cat1\r
                 uint8_t send_data = 0x00;\r
 \r
-                uapi_cat1_power_on(1);\r
-                uapi_cat1_reset(0);\r
+                power_on_cat1();\r
 \r
                 factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST,\r
                         BLE_TEST_CMD_SOFT_TEST_SUB_MODE_CAT1,\r
@@ -1247,8 +1336,7 @@ void factorytest_protocol_soft_test_decode(uint8_t submode,uint8_t testitem,uint
                 //关闭cat1\r
                 uint8_t send_data = 0x00;\r
 \r
-                uapi_cat1_power_on(0);\r
-                uapi_cat1_reset(1);\r
+                power_off_cat1();\r
 \r
                 factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST,\r
                         BLE_TEST_CMD_SOFT_TEST_SUB_MODE_CAT1,\r
@@ -1374,6 +1462,35 @@ void factorytest_protocol_soft_test_decode(uint8_t submode,uint8_t testitem,uint
                         2);\r
             }\r
             break;\r
+\r
+        case BLE_TEST_CMD_SOFT_TEST_SUB_MODE_SPEAKER:\r
+            if(testitem == 0x01)\r
+            {\r
+\r
+                uint8_t send_data= 0;\r
+\r
+                uapi_check_speaker(1);\r
+                \r
+                factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST,\r
+                        BLE_TEST_CMD_SOFT_TEST_SUB_MODE_SPEAKER,\r
+                        0x01,\r
+                        &send_data,\r
+                        1);\r
+            } else if(testitem == 0x02)\r
+            {\r
+\r
+                uint8_t send_data = 0;\r
+\r
+                uapi_check_speaker(0);;\r
+                \r
+                factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST,\r
+                        BLE_TEST_CMD_SOFT_TEST_SUB_MODE_SPEAKER,\r
+                        0x02,\r
+                        &send_data,\r
+                        1);\r
+            }\r
+            break;\r
+\r
         default:\r
             printf("");\r
             break;\r
index c2478b8..47cc3f5 100644 (file)
@@ -95,6 +95,8 @@ extern "C" {
 #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
index 05b6d83..30b9399 100644 (file)
@@ -9,9 +9,12 @@ set(SOURCES ${SOURCES}
     ${CMAKE_CURRENT_SOURCE_DIR}/src/main_dml.c
     ${CMAKE_CURRENT_SOURCE_DIR}/src/test_api.c
     ${CMAKE_CURRENT_SOURCE_DIR}/src/board_yh601s.c
+    ${CMAKE_CURRENT_SOURCE_DIR}/src/custom_factory_core.c
+    ${CMAKE_CURRENT_SOURCE_DIR}/src/custom_factory_impl.c
     ${CMAKE_CURRENT_SOURCE_DIR}/service/cywee_service.c
     ${CMAKE_CURRENT_SOURCE_DIR}/service/cywee_at_cmd.c
     ${CMAKE_CURRENT_SOURCE_DIR}/service/cywee_hal.c
+
     # ${CMAKE_CURRENT_SOURCE_DIR}/../acc/lis2doc_STdC/examples/lis2doc_read_data_single.c
     # ${CMAKE_CURRENT_SOURCE_DIR}/../acc/lis2doc_STdC/lis2doc_porting.c
 )
@@ -46,11 +49,11 @@ set(MAIN_COMPONENT
     false
 )
 
-
 if("SUPPORT_AT_CYWEE" IN_LIST DEFINES)
     find_library(LIB_PATH_CWM_LIB_DML Lib/CWM_LIB_DML_clang_riscv.a ${CMAKE_CURRENT_SOURCE_DIR})
     find_library(LIB_PATH_CWM_LIB Lib/CWM_LIB_clang_riscv.a ${CMAKE_CURRENT_SOURCE_DIR})
     target_link_libraries(${TARGET_NAME} PRIVATE -Wl,--whole-archive ${LIB_PATH_CWM_LIB_DML} ${LIB_PATH_CWM_LIB} PRIVATE -Wl,--whole-archive)
 endif()
-
+    #target_link_libraries(${TARGET_NAME} PRIVATE -Wl,--whole-archive  ${LIB_PATH_CWM_LIB} PRIVATE -Wl,--whole-archive)
+#endif()
 build_component()
diff --git a/code/sdk/drivers/peripheral/cywee/Inc/custom_factory.h b/code/sdk/drivers/peripheral/cywee/Inc/custom_factory.h
new file mode 100644 (file)
index 0000000..fe7749c
--- /dev/null
@@ -0,0 +1,63 @@
+#ifndef __CUSTOM_FACTORY_H__
+#define __CUSTOM_FACTORY_H__
+#include <stdarg.h>
+
+
+#ifndef __CWM_LIB_H__
+//Needed by custom_factory_core.c
+
+#define SCL_GET_CHIP_INFO       8
+#define SCL_GET_LIB_INFO        12
+#define SCL_CHIP_VENDOR_CONFIG  17
+
+typedef struct {
+    int iData[16];
+} SettingControl_t;
+
+int CWM_SettingControl(int CtrId, SettingControl_t *pData);
+
+typedef struct {
+    unsigned int sensorType;
+    unsigned int index;
+    float fData[16];
+    unsigned long timestamp_ns;
+    void *memData;
+} SensorEVT_t, *pSensorEVT_t;
+
+typedef void (*FN_SENSOR_LISTEN)(pSensorEVT_t);
+
+//void CWM_LibPostInit(FN_SENSOR_LISTEN pfn);
+#endif //__CWM_LIB_H__
+
+
+
+
+typedef struct {
+    int sec_write_len;
+    int sec_empty_value;
+    int sec_rewritable;
+    char *chip_name;
+} reburn_prepare_t;
+
+typedef struct {
+    void (*log_print)(const char* str);
+} print_api_t;
+
+int secFactory_init(int rand_seed);
+int secFactory_make_sec(char version, char *code, int *pCode);
+int secFactory_make_chipInfo(char *strChipInfo);
+
+void reburn_log_printf(const char* fmt, ...);
+
+int impl_prepare(reburn_prepare_t *var_out);
+int impl_checkMcuModel(void);
+int impl_stick_env_init(void);
+int impl_stick_env_deinit(void);
+int impl_sec_env_init(void);
+int impl_sec_env_deinit(void);
+int impl_sec_is_locked(void);
+int impl_sec_read(unsigned char *buf, unsigned int len);
+int impl_sec_erase(void);
+int impl_sec_write(unsigned char *buf, unsigned int len);
+
+#endif //__CM_SIMPLE_FACTORY_H__
diff --git a/code/sdk/drivers/peripheral/cywee/src/custom_factory_core.c b/code/sdk/drivers/peripheral/cywee/src/custom_factory_core.c
new file mode 100644 (file)
index 0000000..5107e1e
--- /dev/null
@@ -0,0 +1,184 @@
+#include <stdio.h>\r
+#include <stdint.h>\r
+#include <stdlib.h>\r
+#include <string.h>\r
+#include <stdarg.h>\r
+\r
+#include "custom_factory.h"\r
+\r
+#define STS_OK                        0\r
+#define STS_ERR_WRONG_MODEL          -1\r
+#define STS_ERR_INVALID_LIB          -2\r
+#define STS_ERR_SEC_READ_FAIL        -3\r
+#define STS_ERR_MEDIUM_LOCKED        -4\r
+#define STS_ERR_BLOCK_NOT_EMPTY      -5\r
+#define STS_ERR_ERASE_FAILED         -6\r
+#define STS_ERR_SEC_INIT             -7\r
+#define STS_ERR_SEC_MAKE_CHIPINFO    -8\r
+#define STS_ERR_SEC_MAKE_SEC         -9\r
+#define STS_ERR_SEC_WRITE_LEN        -10\r
+#define STS_ERR_SEC_WRITE            -11\r
+\r
+static print_api_t m_reburn_print_api;\r
+static reburn_prepare_t m_var;\r
+\r
+\r
+\r
+void reburn_setup_api(print_api_t *api) {\r
+    m_reburn_print_api.log_print = api->log_print;\r
+}\r
+\r
+void reburn_log_printf(const char* fmt, ...) {\r
+    va_list argList;\r
+    uint8_t localBuf[255];\r
+\r
+    if (!m_reburn_print_api.log_print)\r
+        return;\r
+\r
+    va_start(argList, fmt);\r
+    vsnprintf((char *)localBuf, sizeof(localBuf), fmt,argList);\r
+    va_end(argList);\r
+\r
+    m_reburn_print_api.log_print((const char*)localBuf);\r
+}\r
+\r
+static int is_sec_empty(uint8_t* buf, uint32_t len) {\r
+    for (int i = 0 ; i < len ; i++) {\r
+        if (buf[i] != m_var.sec_empty_value) {\r
+            reburn_log_printf("is_sec_empty(): block %d not empty(0x%02x)\n", i, buf[i]);\r
+            return 0;\r
+        }\r
+    }\r
+\r
+    return 1;\r
+}\r
+\r
+static void dump_sec(uint8_t* buf, uint32_t len) {\r
+    uint32_t offset = 0, remainBytes = len;\r
+\r
+    if (len % 16 != 0)\r
+        return;\r
+\r
+    while (remainBytes >= 16) {\r
+        reburn_log_printf("%08x  | %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x\n", offset,\r
+            *(buf + (offset) + 0 ), *(buf + (offset) + 1 ), *(buf + (offset) + 2 ), *(buf + (offset) + 3 ),\r
+            *(buf + (offset) + 4 ), *(buf + (offset) + 5 ), *(buf + (offset) + 6 ), *(buf + (offset) + 7 ),\r
+            *(buf + (offset) + 8 ), *(buf + (offset) + 9 ), *(buf + (offset) + 10), *(buf + (offset) + 11),\r
+            *(buf + (offset) + 12), *(buf + (offset) + 13), *(buf + (offset) + 14), *(buf + (offset) + 15));\r
+        offset += 16;\r
+        remainBytes -= 16;\r
+    }\r
+}\r
+\r
+int reburn_second_dev(void) {\r
+    SettingControl_t scl;\r
+    char str_chipInfo[48];\r
+    unsigned char buf[256];\r
+    char EncodeData[512];\r
+    int len = 0, ret = 0;\r
+\r
+    impl_prepare(&m_var);\r
+\r
+    reburn_log_printf("[reburn_second_dev] Built at %s %s\n", __DATE__, __TIME__);\r
+    printf("[reburn_second_dev] Built at \r\n");\r
+    if (!impl_checkMcuModel()) {\r
+        reburn_log_printf("cannot reburn: wrong model\n");\r
+        printf("cannot reburn: wrong model \r\n");\r
+        return STS_ERR_WRONG_MODEL;\r
+    }\r
+\r
+    memset(&scl, 0, sizeof(scl));\r
+    scl.iData[0] = 1;\r
+    CWM_SettingControl(SCL_GET_LIB_INFO, &scl);\r
+    if (scl.iData[5] < 3000) {\r
+        reburn_log_printf("%d Not a valid reburn library\n", scl.iData[5]);\r
+        printf("%d Not a valid reburn library\n", scl.iData[5]);\r
+        return STS_ERR_INVALID_LIB;\r
+    }\r
+    reburn_log_printf("model:%s version:%d.%d.%d.%d product:%d\n", m_var.chip_name, scl.iData[1], scl.iData[2], scl.iData[3], scl.iData[4], scl.iData[5]);\r
+    printf("model:%s version:%d.%d.%d.%d product:%d\n", m_var.chip_name, scl.iData[1], scl.iData[2], scl.iData[3], scl.iData[4], scl.iData[5]);\r
+\r
+    impl_sec_env_init();\r
+\r
+    impl_stick_env_init();\r
+\r
+    CWM_LibPostInit(NULL);\r
+\r
+    if (secFactory_init(0) != 1) {\r
+        printf("secFactory_init fail\n");\r
+        return STS_ERR_SEC_INIT;\r
+    }\r
+\r
+    impl_stick_env_deinit();\r
+\r
+    impl_sec_env_deinit();\r
+\r
+    memset(&scl, 0, sizeof(scl));\r
+    scl.iData[0] = 1;\r
+    scl.iData[1] = 1;\r
+    scl.iData[2] = (int)&str_chipInfo[0];\r
+    scl.iData[3] = sizeof(str_chipInfo);\r
+    scl.iData[4] = 0;\r
+    scl.iData[5] = 0;\r
+    scl.iData[6] = 0;\r
+    CWM_SettingControl(SCL_GET_CHIP_INFO, &scl);\r
+    printf("have_security = %d.%d ret_buff_size = %d\n", scl.iData[5], scl.iData[6], scl.iData[4]);\r
+    printf("[getinfo]chipInfo=%s\n", str_chipInfo);\r
+    if (scl.iData[5] == 1) {\r
+        printf("valid security found\n");\r
+        return STS_OK;\r
+    }\r
+\r
+    memset(buf, 0x0, sizeof(buf));\r
+    ret = impl_sec_read(buf, m_var.sec_write_len);\r
+    if (ret != 1) {\r
+        printf("cannot reburn: read error(%d)\n", ret);\r
+        return STS_ERR_SEC_READ_FAIL;\r
+    }\r
+    dump_sec(buf, m_var.sec_write_len);\r
+\r
+    if (impl_sec_is_locked()) {\r
+        printf("cannot reburn: locked\n");\r
+        return STS_ERR_MEDIUM_LOCKED;\r
+    }\r
+\r
+    if (!is_sec_empty(buf, m_var.sec_write_len)) {\r
+        if (!m_var.sec_rewritable) {\r
+            printf("cannot reburn: block not empty\n");\r
+            return STS_ERR_BLOCK_NOT_EMPTY;\r
+        }\r
+        ret = impl_sec_erase();\r
+        if (ret != 1) {\r
+            printf("cannot reburn: erase error(%d)\n", ret);\r
+            return STS_ERR_ERASE_FAILED;\r
+        }\r
+    }\r
+\r
+    if (secFactory_make_chipInfo(str_chipInfo) != 1) {\r
+        printf("secFactory_make_chipInfo fail\n");\r
+        return STS_ERR_SEC_MAKE_CHIPINFO;\r
+    }\r
+    printf("[makesec]chipInfo=%s\n", str_chipInfo);\r
+\r
+    memset(EncodeData, 0, sizeof(EncodeData));\r
+    ret = secFactory_make_sec(0x01, EncodeData, &len);\r
+    if (ret != 1) {\r
+        printf("secFactory_make_sec fail\n");\r
+        return STS_ERR_SEC_MAKE_SEC;\r
+    }\r
+\r
+    if (len < m_var.sec_write_len) {\r
+        printf("sec length error(%d/%d)\n", len, m_var.sec_write_len);\r
+        return STS_ERR_SEC_WRITE_LEN;\r
+    }\r
+\r
+    ret = impl_sec_write((uint8_t*)&EncodeData[0], len);\r
+    if (ret != 1) {\r
+        printf("cannot reburn: write error(%d)\n", ret);\r
+        return STS_ERR_SEC_WRITE;\r
+    }\r
+\r
+    printf("reburn complete\n");\r
+\r
+    return STS_OK;\r
+}\r
diff --git a/code/sdk/drivers/peripheral/cywee/src/custom_factory_impl.c b/code/sdk/drivers/peripheral/cywee/src/custom_factory_impl.c
new file mode 100644 (file)
index 0000000..0e88bc3
--- /dev/null
@@ -0,0 +1,101 @@
+#include <stdio.h>\r
+#include <stdlib.h>\r
+#include <string.h>\r
+#include "custom_factory.h"\r
+\r
+#include "osal_interrupt.h"\r
+#include "gpio.h"\r
+#include "flash.h"\r
+\r
+extern int cm__hs1__init(void);\r
+extern int cm__hs1__deinit(void);\r
+\r
+#define OTP_RW_OFFSET           (0x100)\r
+\r
+static reburn_prepare_t m_chipCfg = {\r
+    .sec_write_len   = 16,\r
+    .sec_empty_value = 0x00,\r
+    .sec_rewritable  = 0,\r
+    .chip_name       = "YH601S"\r
+};\r
+\r
+static uint32_t irqMask = 0;\r
+\r
+int impl_prepare(reburn_prepare_t *var_out) {\r
+    memcpy(var_out, (void*)&m_chipCfg, sizeof(m_chipCfg));\r
+\r
+    return 1;\r
+}\r
+\r
+int impl_checkMcuModel() {\r
+    return 1;\r
+}\r
+\r
+int impl_sec_env_init() {\r
+    return 1;\r
+}\r
+\r
+int impl_stick_env_init() {\r
+    SettingControl_t scl;\r
+    memset(&scl, 0, sizeof(scl));\r
+    scl.iData[0] = 1;\r
+    scl.iData[1] = 31010100;\r
+    CWM_SettingControl(SCL_CHIP_VENDOR_CONFIG, &scl);\r
+\r
+    irqMask =  osal_irq_lock();\r
+\r
+    if (cm__hs1__init() != 1) {\r
+        reburn_log_printf("%s: failed\n", __FUNCTION__);\r
+        return -1;\r
+    }\r
+    return 1;\r
+}\r
+\r
+int impl_sec_is_locked() {\r
+    return 0;\r
+}\r
+\r
+int impl_stick_env_deinit() {\r
+    if (cm__hs1__deinit() != 1) {\r
+        reburn_log_printf("%s: failed\n", __FUNCTION__);\r
+        return -1;\r
+    }\r
+\r
+    osal_irq_restore(irqMask);\r
+\r
+    return 1;\r
+}\r
+\r
+int impl_sec_env_deinit() {\r
+    return 1;\r
+}\r
+\r
+int impl_sec_read(unsigned char *buf, unsigned int len) {\r
+    if (!buf) {\r
+        reburn_log_printf("[read_security] null buf\n");\r
+        return -1;\r
+    }\r
+\r
+    if (uapi_efuse_read_buffer(buf, OTP_RW_OFFSET, m_chipCfg.sec_write_len) != 0) {\r
+        return -2;\r
+    }\r
+\r
+    return 1;\r
+}\r
+\r
+int impl_sec_write(unsigned char *buf, unsigned int len) {\r
+    if (!buf) {\r
+        reburn_log_printf("[write_security] null buf\n");\r
+        return -1;\r
+    }\r
+\r
+    if (uapi_efuse_write_buffer(OTP_RW_OFFSET, buf, m_chipCfg.sec_write_len) != 0) {\r
+        return -2;\r
+    }\r
+\r
+    return 1;\r
+}\r
+\r
+int impl_sec_erase() {\r
+    return 1;\r
+}\r
index 317d8fe..8fb6c30 100644 (file)
@@ -325,9 +325,9 @@ void get_gsonsen_xyz(gsenson_t *t)
         //     CWM_OS_dbgPrintf("get_gsonsen_xyz_fail\n");
         //     return;
         // }
-        t->x = gxyz_t_queue[left_falg].x;
-        t->y = gxyz_t_queue[left_falg].y;
-        t->z = gxyz_t_queue[left_falg].z;
+        t->x = gxyz_t.x;
+        t->y = gxyz_t.y;
+        t->z = gxyz_t.z;
         //osal_mutex_unlock(&mutex_gsenson_queue);
 }
 
@@ -362,15 +362,18 @@ void CWM_AP_SensorListen(pSensorEVT_t sensorEVT) {
     cywee_msg_callback_t cywee_func;
     switch (sensorEVT->sensorType) {
         case IDX_ACCEL:
+        gxyz_t.x = sensorEVT->fData[0];
+        gxyz_t.y = sensorEVT->fData[1];
+        gxyz_t.z = sensorEVT->fData[2];
 
-        if(get_acc_swtich)
-        {
             // CWM_OS_dbgPrintf("acc: x=%.3f, y=%.3f, z=%.3f\n",
             //                                            sensorEVT->fData[0],
             //                                            sensorEVT->fData[1],
             //                                            sensorEVT->fData[2]
             //                                             );
 
+        if(get_acc_swtich)
+        {
             if(num_falg==25)
             {
                 left_falg++;
@@ -712,6 +715,7 @@ int cywee_main_dml(void)
     }
 
     cywee_installized = 1;
+    //reburn_second_dev();
     int i;
     memset(&scl, 0, sizeof(scl));
     scl.iData[0] = 1;
index 94df490..6fc1c96 100644 (file)
@@ -125,7 +125,7 @@ ppg_sensor_data_t ppg_s_data;
 \r
 int cywee_data[2] = {0};\r
 \r
-int wear_mode_status = 0;\r
+int wear_mode_status = -1;\r
 \r
 //////// spo2 para and switches\r
 const  uint8_t   COUNT_BLOCK_NUM = 25;            //delay the block of some single good signal after a series of bad signal\r
index 1d11fb7..dd06ace 100644 (file)
@@ -27,6 +27,7 @@
 #ifdef FD230
 #include "soundandvibration/include/SoundAndVibrationVolumeSettingC.h"
 #include "networkandcall/include/NetworkAndCallC.h"
+#include "producttest/include/testspeakerC.h"
 #endif
 #include <dirent.h>
 #include <unistd.h>
@@ -1305,13 +1306,6 @@ errcode_t uapi_get_fw_version(uint8_t *_major, uint8_t *_mid,uint8_t *_minor)
 
     return ERRCODE_SUCC;
 }
-#include "vibrator.h"
-
-void vibrator_cyclicity(uint16_t duty , uint16_t cycle_time_ms,uint16_t duration_time_ms)
-{
-    g_VibratorFunc(duty,cycle_time_ms,duration_time_ms);
-}
-
 
 void uapi_take_to_wake(int cmd)
 {
@@ -1679,13 +1673,12 @@ void test_bandy_time(uint32_t timestamp)
 
 #include "tyhx_hrs_custom.h"
 
-void get_ppg_id(void)
+void uapi_ppg_get_id(uint8_t *chip_id)
 {
-    tyhx_poweron();
-    hx3695_chip_check();
-    tyhx_poweroff();
+    custom_i2c_read_regs(HX3695_I2C_DEV_8ADDR,0x00,1,chip_id,1,I2C_BUS_2);
 }
 
+
 #include "hal_i2c.h"
 #include "i2c.h"
 #define CUSTOM_I2C_TIME_MAX 3
@@ -1936,8 +1929,7 @@ void uapi_enter_power_saving_mode(void)
     stop_custom_ble_service();
 
     //关闭cat1
-    uapi_cat1_power_on(0);
-    uapi_cat1_reset(1);
+    power_off_cat1();
 
     //停止心率周期检测
     
@@ -1954,9 +1946,7 @@ void uapi_exit_power_saving_mode(void)
     start_custom_ble_service();
 
     //打开cat1
-    uapi_cat1_power_on(1);
-    uapi_cat1_reset(0);
-
+    power_on_cat1();
     //开启心率周期检测
     
 }
@@ -1993,13 +1983,12 @@ void uapi_cywee_time_sync(void)
     do_cywee_service_check_msg(CYWEE_SERVICE_CMD_TIME_SYNC,NULL);
 }
 
-void uapi_cywee_get_id(void)
+void uapi_cywee_get_id(uint8_t *id)
 {
-    uint8_t id = 0;
-    custom_i2c_read_regs(0x19,0x0FU,1,&id,1,I2C_BUS_2);
-    PRINT("cywee id : 0x%X \r\n",id);
+    custom_i2c_read_regs(0x19,0x0FU,1,id,1,I2C_BUS_2);
 }
 
+
 void uapi_cywee_get_chipinfo(char *databuf,uint8_t len)
 {
     cywee_get_chipinfo(databuf,len);
@@ -2020,4 +2009,11 @@ int custom_exit_lpm(void)
 
     return ret;
 }
-#endif
\ No newline at end of file
+#endif
+
+int uapi_check_speaker(bool isopen)
+{
+    #ifdef FD230
+        return check_speaker(isopen);
+    #endif
+}
\ No newline at end of file
index 5bd5c3b..7ee0031 100644 (file)
@@ -117,8 +117,6 @@ errcode_t uapi_get_fw_version(uint8_t *_major, uint8_t *_mid,uint8_t *_minor);
 //抬腕亮屏
 void uapi_take_to_wake(int cmd);
 
-//开关马达
-void vibrator_cyclicity(uint16_t duty , uint16_t cycle_time_ms,uint16_t duration_time_ms);
 
 //获取lcd id
 void lcd_getid(uint32_t *id);
@@ -145,11 +143,6 @@ void battery_getvolpower(uint8_t *power);
 void flash_getid(uint32_t *id);
 void flash_erase(void);
 
-//进入recovery
-int enter_recovery(void);
-//设置bmp图片
-int set_bmp(void);
-
 void get_gsensor_single(uint8_t *databuf);
 
 
@@ -192,14 +185,14 @@ errcode_t custom_i2c_transfer(uint16_t slaveAddr, uint16_t reg, int regLength, u
 uint32_t custom_i2c_suspend(void);
 uint32_t custom_i2c_resume(void);
 
-void uapi_cywee_get_id(void);
+void uapi_cywee_get_id(uint8_t *id);
 int custom_exit_lpm(void);
 
 void uapi_cywee_get_sleep_data(void);
 void uapi_cywee_set_user_info(int user_info[5]);
 void uapi_cywee_time_sync(void);
 void uapi_cywee_get_chipinfo(char *databuf,uint8_t len);
-
+void uapi_ppg_get_id(uint8_t *chip_id);
 #include "custom_utilscpp.h"
 
 
index cda26d5..851b4b1 100644 (file)
@@ -279,16 +279,6 @@ static uint32_t custom_touch_getstate(uint8_t *para, uint32_t paraLen, char *str
     return ERRCODE_SUCC;
 }
 
-static uint32_t custom_mmc5603_getid(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
-{
-
-    UNUSED(strCommonCmd);
-
-    //mmc5603_getid();
-
-    return ERRCODE_SUCC;
-}
-
 static uint32_t custom_mmc5603_getdata(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
 {
 
@@ -409,8 +399,8 @@ static uint32_t custom_get_ppg_id(uint8_t *para, uint32_t paraLen, char *strComm
 {
 
     UNUSED(strCommonCmd);
-
-    get_ppg_id();
+    uint8_t chip_id;
+    uapi_ppg_get_id(&chip_id);
 
     return ERRCODE_SUCC;
 }
@@ -451,8 +441,8 @@ static uint32_t custom_get_cywee_id(uint8_t *para, uint32_t paraLen, char *strCo
 {
 
     UNUSED(strCommonCmd);
-
-    uapi_cywee_get_id();
+    uint8_t id;
+    uapi_cywee_get_id(&id);
  
     return ERRCODE_SUCC;
 }
@@ -613,8 +603,6 @@ static const at_cmd_table_t g_custom_utils_cmd[] = {
 
     { (char *)"AT^SCREENSTATE",      custom_touch_getstate, (char *)" " },
 
-    { (char *)"AT^MMC5603ID",      custom_mmc5603_getid, (char *)" " },
-
     { (char *)"AT^MMC5603GETDATA",      custom_mmc5603_getdata, (char *)" " },
 
     { (char *)"AT^CHARGESTATE",      custom_charge_getstate, (char *)" " },