优化马达震动,优化蓝牙产测 323/1 323/head 324/target/1
authorpenglei <1624952103@qq.com>
Wed, 19 Jun 2024 09:56:50 +0000 (17:56 +0800)
committerpenglei <1624952103@qq.com>
Wed, 19 Jun 2024 09:56:50 +0000 (17:56 +0800)
code/sdk/application/wearable/ohos_startup/ohosfwk_startup.c
code/sdk/application/wearable/service/factorytest_service/factorytest_protocol.c
code/sdk/build/config/target_config/brandy/config.py
code/sdk/drivers/boards/brandy_evb/board_config/board_evb.h
code/sdk/drivers/peripheral/mag/mmc5603/mmc5603_main.c
code/sdk/drivers/peripheral/vibrator/service/vibrator_service.cpp
code/sdk/drivers/peripheral/vibrator/vibrator.c
code/sdk/middleware/services/gui/uikit/proprietary/src/service/src/graphic_service_wrapper.cpp

index 9ae7b27..abdfc2c 100755 (executable)
@@ -84,8 +84,8 @@ void ohos_startup()
     mount_user_res_partition();
 #endif
 
-
 wait_animation_stop();
+boot_animation_init_deinit();
 
 #if defined(CONFIG_OTA_UPDATE_SUPPORT) && defined(ENABLE_UIKIT)
     //如果在升级状态,则不进入系统
index 64073c0..cb08cb7 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: penglei 1624952103@qq.com\r
  * @Date: 2024-06-17 14:31:08\r
  * @LastEditors: penglei 1624952103@qq.com\r
- * @LastEditTime: 2024-06-17 17:51:27\r
+ * @LastEditTime: 2024-06-19 17:07:52\r
  * @FilePath: /FD230/code/sdk/application/wearable/service/factorytest_service/factorytest_protocol.c\r
  * @Description: \r
  * \r
@@ -79,9 +79,6 @@ static osTimerId_t g_ble_vibrator_timer = NULL;
 \r
 static osTimerId_t g_ble_acc_timer = NULL;\r
 \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
@@ -178,37 +175,6 @@ void ble_acc_check_timer_callback(void)
             6);\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
-    osTimerStop(g_ble_microhone_timer);\r
-    osTimerDelete(g_ble_microhone_timer);\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
-\r
-}\r
-\r
-void ble_spk_check_timer_callback(void)\r
-{\r
-    uint8_t send_data= 0;\r
-\r
-    uapi_check_spk(0);\r
-    osTimerStop(g_ble_spk_timer);\r
-    osTimerDelete(g_ble_spk_timer);\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
-\r
 void aging_task(void)\r
 {\r
     while(aging_t.flag == 0xfdfd0002 && aging_time)\r
@@ -745,7 +711,7 @@ void factorytest_protocol_soft_test_decode(uint8_t submode,uint8_t testitem,uint
                                      (data[2] & 0XFF) << 8 | \r
                                      (data[3] & 0XFF) << 0 ;\r
                 PRINT("rtc set time : %X \r\n",timestamp);\r
-                uaip_set_time_local(timestamp);\r
+                uaip_sntp_set_time_utc(timestamp);\r
                 factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST,\r
                         BLE_TEST_CMD_SOFT_TEST_SUB_MODE_RTC,\r
                         0x01,\r
@@ -1000,6 +966,7 @@ void factorytest_protocol_soft_test_decode(uint8_t submode,uint8_t testitem,uint
             {\r
                 uint8_t send_data = 0;\r
                 uint32_t timeout = *data;\r
+                PRINT("ScreenDurationTime : %d \r\n",*data);\r
                 //修改自动灭屏时间\r
                 uapi_setScreenDuration(timeout);\r
                 \r
@@ -1488,10 +1455,6 @@ void factorytest_protocol_soft_test_decode(uint8_t submode,uint8_t testitem,uint
             {\r
                 //查看网络类型\r
                 uint8_t send_data[2] = {0};\r
-\r
-                cat1_getsignal();\r
-                msleep(1000);\r
- \r
                 send_data[1] = uapi_dev_runtime_get_cat1_networtype();\r
                  \r
                 factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST,\r
@@ -1500,6 +1463,17 @@ void factorytest_protocol_soft_test_decode(uint8_t submode,uint8_t testitem,uint
                         send_data,\r
                         2);\r
             } else if(testitem == 0x06)\r
+            {\r
+                //查看iMei号\r
+                char* imei = uapi_dev_runtime_get_cat1_imei();\r
+                PRINT("imei : %s \r\n",imei);\r
+        \r
+                factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST,\r
+                        BLE_TEST_CMD_SOFT_TEST_SUB_MODE_CAT1,\r
+                        0x06,\r
+                        (uint8_t *)imei,\r
+                        strlen(imei));\r
+            }else if(testitem == 0x07)\r
             {\r
                 //拨打电话\r
                 \r
@@ -1508,11 +1482,11 @@ void factorytest_protocol_soft_test_decode(uint8_t submode,uint8_t testitem,uint
                 cat1_call_dial((char *)data);\r
                 factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST,\r
                         BLE_TEST_CMD_SOFT_TEST_SUB_MODE_CAT1,\r
-                        0x06,\r
+                        0x07,\r
                         &send_data,\r
                         1);\r
 \r
-            } else if(testitem == 0x07)\r
+            } else if(testitem == 0x08)\r
             {\r
                 //接听电话\r
                 uint8_t send_data = 0x00;\r
@@ -1521,12 +1495,12 @@ 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_CAT1,\r
-                        0x07,\r
+                        0x08,\r
                         &send_data,\r
                         1);\r
             }\r
 \r
-            else if(testitem == 0x08)\r
+            else if(testitem == 0x09)\r
             {\r
                 //挂断电话\r
                 uint8_t send_data = 0x00;\r
@@ -1534,7 +1508,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_CAT1,\r
-                        0x08,\r
+                        0x09,\r
                         &send_data,\r
                         1);\r
             }\r
@@ -1576,16 +1550,44 @@ void factorytest_protocol_soft_test_decode(uint8_t submode,uint8_t testitem,uint
             if(testitem == 0x01)\r
             {\r
                 //开始录音\r
+                uint8_t send_data= 0;\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
+                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
 \r
             } else if(testitem == 0x02)\r
+            {\r
+                //停止录音\r
+                uint8_t send_data= 0;\r
+                uapi_microhone_switch(0);\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
+            } else if(testitem == 0x03)\r
             {\r
                 //播放录音\r
+                uint8_t send_data= 0;\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
+                factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST,\r
+                        BLE_TEST_CMD_SOFT_TEST_SUB_MODE_SPEAKER,\r
+                        0x03,\r
+                        &send_data,\r
+                        1);\r
+            } else if(testitem == 0x04)\r
+            {\r
+                //停止播放\r
+                uint8_t send_data= 0;\r
+                uapi_check_spk(0);\r
+                factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST,\r
+                        BLE_TEST_CMD_SOFT_TEST_SUB_MODE_SPEAKER,\r
+                        0x04,\r
+                        &send_data,\r
+                        1);\r
             }\r
             break;\r
 \r
index 086dbcf..f53c96a 100755 (executable)
@@ -119,6 +119,8 @@ target = {
                     # 'WEARABLE_LOG_DEBUG',
                     'SUPPORT_RC_CALIBRATION',
                     'PPG_HX3695',
+                    'VIB_USE_PWM',
+                    'CONFIG_PWM_SUPPORT',
                     # 'ACC_LIS2DOC',
                     'ENABLE_CYWEE',
                     'ENABLE_CUSTOM_I2C',
index 6427ec6..622ec8c 100755 (executable)
@@ -196,8 +196,8 @@ const hal_pio_config_t g_pio_function_config[PIN_MAX_NUMBER] = {
     { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE },   // S_AGPIO_R0   PRG_LED_POWER ON  心率等电源控制脚
     { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE },   // S_AGPIO_R1   SE_REST 安全芯片复位唤醒脚
   #if VIB_USE_PWM
-    // { HAL_PIO_FUNC_PWMP1_M2, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_NONE, HAL_PIO_IE_DISABLE },   // S_AGPIO_R2     VIBR_PWM 马达控制脚 兼容预留马达驱动复位脚
-    // { HAL_PIO_FUNC_PWMN1_M3, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_NONE, HAL_PIO_IE_DISABLE },   // S_AGPIO_R2     VIBR_PWM 马达控制脚 兼容预留马达驱动复位脚
+    // { HAL_PIO_FUNC_PWMP1_M2, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE },   // S_AGPIO_R2     VIBR_PWM 马达控制脚 兼容预留马达驱动复位脚
+    { HAL_PIO_FUNC_PWMN1_M3, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE },   // S_AGPIO_R2     VIBR_PWM 马达控制脚 兼容预留马达驱动复位脚
   #else
     { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE },   // S_AGPIO_R2     VIBR_PWM 马达控制脚 兼容预留马达驱动复位脚
   #endif
index 187b615..422b68b 100644 (file)
@@ -96,7 +96,6 @@ int mmc5603_start(void)
        {       \r
                for(i=0;i<4;i++)\r
                {\r
-                       PRINT("saveData[%d] : %f \r\n",i,saveData[i]);\r
                        mag_hmm[i] = saveData[i]; \r
                }\r
        }\r
index 7b2cc23..ab5645a 100644 (file)
@@ -81,18 +81,18 @@ void custom_VibratorFunc_int(int vibratorType)
     switch (vibratorType)
     {
     case 3:
-        mail.cycle_time_ms = 200;
-        mail.duty = 20;
-        mail.duration_time_ms = 500;
+        mail.cycle_time_ms = 235;
+        mail.duty = 50;
+        mail.duration_time_ms = 100;
         break;
     case 2:
-        mail.cycle_time_ms = 200;
-        mail.duty = 20;
-        mail.duration_time_ms = 200;
+        mail.cycle_time_ms = 235;
+        mail.duty = 30;
+        mail.duration_time_ms = 100;
         break;
     case 1:
-        mail.cycle_time_ms = 200;
-        mail.duty = 20;
+        mail.cycle_time_ms = 235;
+        mail.duty = 10;
         mail.duration_time_ms = 100;
         break;
     default:
index c13f35f..89ef5dc 100644 (file)
@@ -22,8 +22,6 @@
 #include "pinctrl.h"
 #include "vibrator.h"
 
-
-
 #ifdef  VIB_USE_PWM
 #define VIBRATOR_GPIOPPIN S_AGPIO_R2
 // #define VIBRATORPIN_MODE HAL_PIO_FUNC_PWMP1_M2 
@@ -36,7 +34,7 @@
 static  pwm_channel_t channel = PWM_1;
 static  pin_t pin = VIBRATOR_GPIOPPIN;
 static  pin_mode_t mode = VIBRATORPIN_MODE;
-static  uint32_t delay_ms = 500;
+static  uint32_t delay_ms = 5;
 static  pwm_config_t cfg_repeat = { 100, 100, 0xFF, 0xFF, true };
 static  uint32_t param_index = 0;
 static  uint16_t repeat_times = 0;
@@ -47,7 +45,19 @@ static errcode_t pwm_test_callback(uint8_t channel)
     return ERRCODE_SUCC;
 }
 static  uint8_t pwm_started = 0;
-static int test_pwm_repeat(int vibratorType)
+
+#define IOT_PWM_MIN_DUTY           0
+#define IOT_PWM_MAX_DUTY           100
+#define IOT_PWM_DUTY_PART          10
+#define IOT_PWM_FREQ_PART          2
+#define IOT_PWM_MAX_DIV_NUM_MAX    8
+#define IOT_PWM_CFG_OFFEST_TIME    0
+#define IOT_PWM_CFG_REPEAT_CYCLE   100
+#define IOT_PWM_CFG_REPEAT_STATE   true
+#define IOT_SUCCESS    0
+#define IOT_FAILURE   (-1)
+
+static int pwm_start(uint16_t duty , uint16_t freq)
 {
 
     if (pwm_started == 1)
@@ -61,61 +71,99 @@ static int test_pwm_repeat(int vibratorType)
         PRINT("Paremeter Error. PWM max number is 5. \r\n");
         return -1;
     }
+
+    errcode_t ret = 0;
     pwm_started = 1;
-    repeat_times = 0;
     uapi_pwm_init();
     uapi_pin_set_mode(pin, mode);
-    PRINT("+++++++ pwm init success +++++++ \r\n");
-    uint32_t pwm_frequency = uapi_pwm_get_frequency(channel);
+    // PRINT("+++++++ pwm init success +++++++ \r\n");
+  
     /* test for repeat, interrupt only be call when stop or close */
-    PRINT("+++++++ Start pwm repeat test +++++++ pwm_frequency %u\r\n",pwm_frequency);
-    // LOS_Msleep((uint32_t)TEST_TCXO_DELAY_1000MS);
-    // cfg_repeat.high_time = pwm_frequency/2;
-    // cfg_repeat.low_time = pwm_frequency/2;
-    uapi_pwm_open(channel, &cfg_repeat);
+    uint32_t clk_freq = uapi_pwm_get_frequency(channel);
+    uint32_t div_num = (clk_freq + freq / IOT_PWM_FREQ_PART) / freq;   
+    if (div_num < IOT_PWM_MAX_DIV_NUM_MAX) {
+        return IOT_FAILURE;
+    }
+    uint32_t high_time = div_num * duty / IOT_PWM_MAX_DUTY;           
+    if (high_time * IOT_PWM_MAX_DUTY / div_num >= (uint32_t)(duty - duty * IOT_PWM_DUTY_PART / IOT_PWM_MAX_DUTY)) {
+    } else if ((high_time + 1) * IOT_PWM_MAX_DUTY / div_num <=
+                (uint32_t)(duty + duty * IOT_PWM_DUTY_PART / IOT_PWM_MAX_DUTY)) {
+        high_time++;
+    } else {
+        return IOT_FAILURE;
+    }
+    uint32_t low_time = div_num - high_time;
+    pwm_config_t cfg = {
+        .low_time = low_time,
+        .high_time = high_time,
+        .offset_time = IOT_PWM_CFG_OFFEST_TIME,
+        .cycles = IOT_PWM_CFG_REPEAT_CYCLE,
+        .repeat = IOT_PWM_CFG_REPEAT_STATE
+    };
+    // PRINT("+++++++ Start pwm  clk_freq %u , cycles %u , high_time %u , low_time %u\r\n",
+    // clk_freq,
+    // cfg.cycles,
+    // cfg.high_time,
+    // cfg.low_time
+    // );    
+    
+    ret = uapi_pwm_open(channel, &cfg);
+    // PRINT("uapi_pwm_open %d\n",ret);
     uapi_pwm_unregister_interrupt(channel);
     uapi_pwm_register_interrupt(channel, pwm_test_callback);
+
 #if defined(CONFIG_PWM_USING_V151)
     uapi_pwm_set_group(0, 1u << channel);
     uapi_pwm_start(0);
 #else
-    uapi_pwm_start(channel);
-#endif
-    // LOS_Msleep((uint32_t)TEST_TCXO_DELAY_1000MS);
-        LOS_Msleep(delay_ms);
+    ret = uapi_pwm_start(channel);
+    // PRINT("uapi_pwm_start %d\n",ret);
     
-    for (uint32_t test_times = 1; test_times <= vibratorType; test_times++) {
-
-        // uapi_pwm_check(channel)
-        PRINT("+++++++ pwm repeat interrupt +++++++ \r\n");
-        if (test_times == vibratorType) {
-            PRINT("+++++++ pwm repeat ready to trigger interrupt +++++++ \r\n");
-            uapi_pwm_close(channel);
-            break;
-            PRINT("+++++++ pwm repeat exit interrupt +++++++ \r\n");
-        }
-        LOS_Msleep(delay_ms);
-    }
-    
-    uapi_pwm_close(channel);
+#endif  
+
+    return 0;
+}
+
+static int pwm_stop(void)
+{
+
+    errcode_t ret  = uapi_pwm_close(channel);
+    // PRINT("uapi_pwm_close %d\n",ret);
     // LOS_Msleep((uint32_t)TEST_TCXO_DELAY_1000MS);
-     LOS_Msleep(delay_ms);
-     uapi_pwm_deinit();
-     pwm_started = 0;
-     PRINT("+++++++ pwm stoped +++++++ \r\n");
+    LOS_Msleep(delay_ms);
+    uapi_pwm_deinit();
 
+    pwm_started = 0;
+    // PRINT("+++++++ pwm stoped +++++++ \r\n");
     return 0;
 }
-void g_VibratorFunc(uint8_t vibratorType , uint16_t vibtime_ms,uint16_t delaytime_ms)
+
+static uint8_t vibrating = 0;
+static uint8_t switch_flag = 1;
+
+void g_VibratorFunc(uint16_t duty , uint16_t cycle_time_ms,uint16_t duration_time_ms)
 {
 
-    if(vibratorType <1 || vibratorType > 3)
+    if( duty>100 || duty ==0 ||cycle_time_ms == 0 || duration_time_ms == 0)
     {
-        PRINT("g_VibratorFunc vib times should in 1~3 \r\n",vibratorType);
+        PRINT("Not Supported param duty %u cycle_time_ms %u duration_time_ms %u !\r\n",duty,cycle_time_ms,duration_time_ms );
     }else{
-        PRINT("g_VibratorFunc vib  %d times , delaytime_ms %d\r\n",vibratorType ,  delaytime_ms);
-        delay_ms = delaytime_ms;
-        test_pwm_repeat(vibratorType);
+        // PRINT("g_VibratorFunc duration_time_ms  %u  , duty %u , cycle_time_ms %u\r\n",duration_time_ms ,duty,  cycle_time_ms);
+
+        if (vibrating == 1)
+        {
+             PRINT("vibrating skip\r\n");
+            return ;
+        }
+        vibrating = 1;
+
+        pwm_start(duty,cycle_time_ms);
+
+        LOS_Msleep(duration_time_ms);
+
+        pwm_stop();
+  
+        vibrating = 0;
     }
 }
 
index 116cd64..693e97c 100755 (executable)
@@ -123,23 +123,6 @@ private:
         OHOS::RootView::GetInstance()->Remove(boot_group);
         delete boot_group;
         boot_group = nullptr;
-
-
-
-        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 !");
-
-        if(taskcfg.attr.stack_mem != NULL) 
-        {
-            free(taskcfg.attr.stack_mem);
-            taskcfg.attr.stack_mem = NULL;
-        }
-        if(taskcfg.task_handle != NULL)
-            taskcfg.task_handle = NULL;
     }
 
 }; 
@@ -433,6 +416,24 @@ void ShowGraphicOTALogo(void)
     LOS_Msleep(500);
 }
 
+void boot_animation_init_deinit(void)
+{
+    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 !");
+
+    if(taskcfg.attr.stack_mem != NULL) 
+    {
+        free(taskcfg.attr.stack_mem);
+        taskcfg.attr.stack_mem = NULL;
+    }
+    if(taskcfg.task_handle != NULL)
+        taskcfg.task_handle = NULL;
+}
+
 void boot_animation_init(void)
 {
     taskcfg.task_handle = g_boot_animation_task_handle;