void custom_VibratorFunc(OHOS::VibratorType vibratorType)
{
+
+ vibrator_cmd_t mail = {0};
switch (vibratorType)
{
case OHOS::VibratorType::VIBRATOR_TYPE_ONE:
- do_vibrator_cmd(VIB_CMD_MSG_ONE);
+ mail.cycle_time_ms=200;
+ mail.duty = 20;
+ mail.duration_time_ms = 500;
break;
case OHOS::VibratorType::VIBRATOR_TYPE_TWO:
- do_vibrator_cmd(VIB_CMD_MSG_TWO);
+ mail.cycle_time_ms=200;
+ mail.duty = 20;
+ mail.duration_time_ms = 1000;
break;
case OHOS::VibratorType::VIBRATOR_TYPE_THREE:
- do_vibrator_cmd(VIB_CMD_MSG_THREE);
+ mail.cycle_time_ms=200;
+ mail.duty = 20;
+ mail.duration_time_ms = 1500;
break;
}
+ do_vibrator_cmd(mail);
+
}
#define MAG_CHECK_MS 20
-void do_vibrator_cmd(int cmd)
+
+void do_vibrator_cmd(vibrator_cmd_t cmd)
{
int ret;
- common_notify_mail_t mail = {0};
- mail.comm.app = (app_type)cmd;
+ vibrator_cmd_t mail = {0};
+ mail.cycle_time_ms = cmd.cycle_time_ms;
+ mail.duty = cmd.duty;
+ mail.duration_time_ms = cmd.duration_time_ms;
ret = osal_msg_queue_write_copy(g_app_queue, (void *)&mail,
- sizeof(common_notify_mail_t), 0);
+ sizeof(vibrator_cmd_t), 0);
if (ret != OSAL_SUCCESS) {
PRINT("Error mag Check MSG 0x%02X send failed! err=0x%x! \r\n",cmd, ret);
}
{
unused(arg);
int32_t ret;
- common_notify_mail_t mail;
- uint32_t msgsize = (uint32_t)sizeof(common_notify_mail_t);
+ vibrator_cmd_t mail;
+ uint32_t msgsize = (uint32_t)sizeof(vibrator_cmd_t);
while (1) {
ret = osal_msg_queue_read_copy(g_app_queue, (void *)&mail, &msgsize,
if (ret != OSAL_SUCCESS) {
continue;
}
-
-
- if (mail.comm.app == VIB_CMD_MSG_ONE)
- {
- g_VibratorFunc( 1 , 500, 50);
- }
- else if (mail.comm.app == VIB_CMD_MSG_TWO)
- {
- g_VibratorFunc( 2 , 500, 50);
- }
- else if (mail.comm.app == VIB_CMD_MSG_THREE)
- {
- g_VibratorFunc( 3 , 500, 50);
- }
+
+ g_VibratorFunc( mail.duty , mail.cycle_time_ms, mail.duration_time_ms);
}
}
errcode_t uapi_vibrator_service_init(void)
{
if (osal_msg_queue_create("vibrator_service_queue", APP_BOARD_MSG_COUNT, &g_app_queue,
- 0, sizeof(common_notify_mail_t)) != ERRCODE_SUCC) {
+ 0, sizeof(vibrator_cmd_t)) != ERRCODE_SUCC) {
PRINT("[mag][service] app create mail fail\n");
return ERRCODE_FAIL;
}
#include "errcode.h"
-#define VIB_CMD_MSG_ONE 0x21
-#define VIB_CMD_MSG_TWO 0x22
-#define VIB_CMD_MSG_THREE 0x23
+typedef struct {
+ uint32_t duty; //占空比
+ uint32_t cycle_time_ms; //频率
+ uint32_t duration_time_ms;//震动时间
+} vibrator_cmd_t;
/**
* 测试指令 参数cmd 选项: VIB_CMD_MSG_ONE VIB_CMD_MSG_TWO VIB_CMD_MSG_THREE
*/
-extern void do_vibrator_cmd(int cmd);
+extern void do_vibrator_cmd(vibrator_cmd_t cmd);
#ifdef __cplusplus
#if __cplusplus
#define VIBRATORPIN_MODE HAL_PIO_FUNC_GPIO
static pin_t pin = VIBRATOR_GPIOPPIN;
static pin_mode_t mode = VIBRATORPIN_MODE;
-#define VIBRATOR_VIB_HZ 200
-static void vib_once(uint32_t duration_time)
-{
- uint32_t delaytime_ms = 1000/VIBRATOR_VIB_HZ;
- uapi_pin_set_mode(VIBRATOR_GPIOPPIN, (pin_mode_t)HAL_PIO_FUNC_GPIO);
- uapi_gpio_set_dir(VIBRATOR_GPIOPPIN,GPIO_DIRECTION_OUTPUT);
-
- while(duration_time)
- {
- duration_time-=delaytime_ms;
- uapi_gpio_toggle(VIBRATOR_GPIOPPIN);
- uapi_tcxo_delay_ms(delaytime_ms);
- }
- uapi_gpio_set_val(VIBRATOR_GPIOPPIN,GPIO_LEVEL_LOW);
-}
+static uint8_t vibrating = 0;
-void g_VibratorFunc(uint8_t vibratorType , uint16_t vibtime_ms,uint16_t delaytime_ms)
+
+void g_VibratorFunc(uint16_t duty , uint16_t cycle_time_ms,uint16_t duration_time_ms)
{
- if(vibratorType >0)
+ if( duty>100 || duty ==0 ||cycle_time_ms == 0 || duration_time_ms == 0)
{
- PRINT("g_VibratorFunc vib %d times , vibtime_ms %d , delaytime_ms %d\r\n",vibratorType ,vibtime_ms, delaytime_ms);
- uint8_t count = vibratorType;
- while(count--)
+ 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 duration_time_ms %u , duty %u , cycle_time_ms %u\r\n",duration_time_ms ,duty, cycle_time_ms);
+
+ if (vibrating == 1)
{
- // PRINT("g_VibratorFunc vib %d times \r\n",count );
- vib_once(vibtime_ms);
- // PRINT("g_VibratorFunc vib %d times \r\n",count );
- uapi_tcxo_delay_ms(delaytime_ms);
+ PRINT("vibrating skip\r\n");
+ return ;
+ }
+ vibrating = 1;
+ // PRINT("g_VibratorFunc vib %d times \r\n",count );
+ uapi_pin_set_mode(VIBRATOR_GPIOPPIN, (pin_mode_t)HAL_PIO_FUNC_GPIO);
+ uapi_gpio_set_dir(VIBRATOR_GPIOPPIN,GPIO_DIRECTION_OUTPUT);
+ uint16_t delaytime_ms_high = duty*(1000/cycle_time_ms)/100;
+ uint16_t delaytime_ms_low = (100-duty)*(1000/cycle_time_ms)/100;
+
+
+ if (delaytime_ms_low == 0) delaytime_ms_low = 1;
+ if (delaytime_ms_high == 0) delaytime_ms_high = 1;
+
+ PRINT("g_VibratorFunc delaytime_ms_high %u , delaytime_ms_low %u \r\n",delaytime_ms_high,delaytime_ms_low );
+
+ while(duration_time_ms)
+ {
+ uapi_gpio_set_val(VIBRATOR_GPIOPPIN,GPIO_LEVEL_HIGH);
+ uapi_tcxo_delay_ms(delaytime_ms_high);
+ uapi_gpio_set_val(VIBRATOR_GPIOPPIN,GPIO_LEVEL_LOW);
+ uapi_tcxo_delay_ms(delaytime_ms_low);
+ duration_time_ms-=delaytime_ms_high;
+ duration_time_ms-=delaytime_ms_low;
+
}
- }else{
- PRINT("Not Supported Vibtype %d !\r\n",vibratorType );
+ uapi_gpio_set_val(VIBRATOR_GPIOPPIN,GPIO_LEVEL_LOW);
+ vibrating = 0;
}
}
#endif /* __cplusplus */
#endif /* __cplusplus */
/**
- * vibtype 1 vib1 , 2 vib2, 3 vib3
+ * duty 占空比 : 0-100
+ * cycle_time_ms 频率
+ * duration_time_ms 震动时间
*/
-void g_VibratorFunc(uint8_t vibratorType , uint16_t vibtime_ms,uint16_t delaytime_ms);
+void g_VibratorFunc(uint16_t duty , uint16_t cycle_time_ms,uint16_t duration_time_ms);
/**
* @}
return ERRCODE_FAIL;
}
- if (argc != 1) {
- PRINT("VIBRATORTEST ATCMD Set Parameter Failed argc %d\n",argc);
+ if (argc != 3) {
+ PRINT("VIBRATORTEST ATCMD Set Parameter Failed argc %d, should be AT^VIBRATORTEST=duration cycle duty \n",argc);
return ERRCODE_FAIL;
}
- uint8_t vibtype = (uint8_t)atoi((char*)argv[0]);
- PRINT("VIBRATORTEST ATCMD custom_VibratorFunc VibType %d\n",vibtype);
- hal_custom_VibratorFunc(vibtype);
+ uint16_t duration = (uint16_t)atoi((char*)argv[0]);
+ uint16_t cycle = (uint16_t)atoi((char*)argv[1]);
+ uint16_t duty = (uint16_t)atoi((char*)argv[2]);
+ PRINT("VIBRATORTEST ATCMD custom_VibratorFunc duration %u,cycle %u,duty %u\n",duration,cycle,duty);
+ hal_custom_VibratorFunc(duty,cycle,duration);
return ERRCODE_SUCC;
}
#include "vibrator_hal.h"
#include "vibrator_service.h"
#include "debug_print.h"
-void hal_custom_VibratorFunc(uint8_t vibratorType)
+void hal_custom_VibratorFunc(uint16_t duty , uint16_t cycle_time_ms,uint16_t duration_time_ms)
{
- switch (vibratorType)
- {
- case ENUM_VIBRATOR_TYPE_ONE:
- PRINT("ENUM_VIBRATOR_TYPE_ONE\r\n");
- do_vibrator_cmd(VIB_CMD_MSG_ONE);
- break;
- case ENUM_VIBRATOR_TYPE_TWO:
- PRINT("ENUM_VIBRATOR_TYPE_TWO\r\n");
- do_vibrator_cmd(VIB_CMD_MSG_TWO);
- break;
- case ENUM_VIBRATOR_TYPE_THREE:
- PRINT("ENUM_VIBRATOR_TYPE_THREE\r\n");
- do_vibrator_cmd(VIB_CMD_MSG_THREE);
- break;
- }
+ vibrator_cmd_t cmd = {0};
+
+ PRINT("hal_custom_VibratorFunc\r\n");
+ cmd.cycle_time_ms = cycle_time_ms;
+ cmd.duration_time_ms = duration_time_ms;
+ cmd.duty = duty;
+ do_vibrator_cmd(cmd);
+
}
\ No newline at end of file
extern "C" {
#endif /* __cplusplus */
#endif /* __cplusplus */
-typedef enum {
- ENUM_VIBRATOR_TYPE_ONE=1,
- ENUM_VIBRATOR_TYPE_TWO=2,
- ENUM_VIBRATOR_TYPE_THREE=3,
-} VIB_TYPE_ENUM_T;
-
-void hal_custom_VibratorFunc(uint8_t vibratorType);
+void hal_custom_VibratorFunc(uint16_t duty , uint16_t cycle_time_ms,uint16_t duration_time_ms);
#ifdef __cplusplus
#if __cplusplus
}