mount_user_res_partition();
#endif
-
wait_animation_stop();
+boot_animation_init_deinit();
#if defined(CONFIG_OTA_UPDATE_SUPPORT) && defined(ENABLE_UIKIT)
//如果在升级状态,则不进入系统
* @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
\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
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
(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
{\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
{\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
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
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
\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
\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
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
# 'WEARABLE_LOG_DEBUG',
'SUPPORT_RC_CALIBRATION',
'PPG_HX3695',
+ 'VIB_USE_PWM',
+ 'CONFIG_PWM_SUPPORT',
# 'ACC_LIS2DOC',
'ENABLE_CYWEE',
'ENABLE_CUSTOM_I2C',
{ 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
{ \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
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:
#include "pinctrl.h"
#include "vibrator.h"
-
-
#ifdef VIB_USE_PWM
#define VIBRATOR_GPIOPPIN S_AGPIO_R2
// #define VIBRATORPIN_MODE HAL_PIO_FUNC_PWMP1_M2
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;
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)
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;
}
}
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;
}
};
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;