uapi_bp_service_init();\r
#endif\r
\r
+#ifdef SUPPORT_GYRO_SERVICE\r
+ uapi_gyro_service_init();\r
+#endif\r
+\r
#endif\r
\r
\r
# 'DISABLE_UART_LOG',
# 'CONFIG_GNSS_UART_WITH_FLOWCTRL',
# 'DOWNLOAD_GNSS_SWITCH',
-
+ 'SUPPORT_GYRO_SERVICE',
+ 'GYRO_SH5001',
],
#添加自定义应用
'ram_component': [
"gnss",
"pgnss_sample",
"cyweeBleService",
+ "gyro",
],
'image_analysis': False,
'fs_image_path':'fd230',
extern void ppg_int_callback(pin_t pin, uintptr_t param);
#endif
-#ifdef ENABLE_GYRO
+#ifdef SUPPORT_GYRO_SERVICE
extern void gyro_int_callback(pin_t pin, uintptr_t param);
#endif
{ HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_R5 touch int
{ HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_R6 PRG_INT 心率中断
{ HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_R7 GYRO_INT2
-#ifdef ENABLE_GYRO
+#ifdef SUPPORT_GYRO_SERVICE
{ HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_R8 GYRO_INT1
#else
{ HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_R8 GYRO_INT1
// { S_AGPIO_L31, HAL_GPIO_DIRECTION_INPUT, NULL, GPIO_INTERRUPT_RISING_EDGE, cat1_ring_isr_callback},
#endif
-#ifdef ENABLE_GYRO
+#ifdef SUPPORT_GYRO_SERVICE
{ S_AGPIO_R8, HAL_GPIO_DIRECTION_INPUT, NULL, GPIO_INTERRUPT_RISING_EDGE, gyro_int_callback },
#else
/**S_AGPIO_L32 GPO gps reset*/
#ifdef PPG_GH3X2X
{ S_AGPIO_R6, HAL_GPIO_DIRECTION_INPUT, NULL, GPIO_INTERRUPT_RISING_EDGE, ppg_int_callback},
#elif defined PPG_PAH8009
- // { S_AGPIO_R6, HAL_GPIO_DIRECTION_INPUT, NULL, GPIO_INTERRUPT_FALLING_EDGE, ppg_int_callback},
+ { S_AGPIO_R6, HAL_GPIO_DIRECTION_INPUT, NULL, GPIO_INTERRUPT_FALLING_EDGE, ppg_int_callback},
#endif
#endif
#ifdef ROTARYENCODER_MIXO
}\r
\r
g_tp_send_buf[CST86XX_I2C_SEND_INDEX0] = reg_addr & 0xff;\r
+ g_tp_send_buf[1] = reg_cfg & 0xff;\r
\r
data.send_buf = g_tp_send_buf;\r
data.send_len = CST86XX_REG_WRITE_LEN;\r
tp_err("configuration error (read chip id) 0x%x", ret);\r
return;\r
}\r
- cst86xx_suspend();\r
+ // cst86xx_suspend();\r
}\r
\r
#ifdef __cplusplus\r
//sprintf(id,"0x%02x%02x", chip_id[0], chip_id[1]);
}
}
- ft6x46_suspend();
+ // ft6x46_suspend();
}
#ifdef __cplusplus
#endif
#include "securec.h"
#include "wearable_log.h"
-#ifdef SUPPORT_OHOSFWK
+#ifdef SUPPORT_AT_OHOSFWK
#include "BluetoothWrapper.h"
#endif
bts_data_to_uuid_len2(BLE_UUID_CYWEE_REPORT_SERVICE, &cywee_service_uuid);
//只有一个服务,永远是1
errcode_t ret = 0;
-#ifndef SUPPORT_OHOSFWK
+#ifndef SUPPORT_AT_OHOSFWK
ret = gatts_add_service(server_id, &cywee_service_uuid, true);
printf("ble_cywee_add_service gatts_add_service ret: 0x%x serverId = 0x%x uuid.uuid_len:%d\n", ret, server_id,cywee_service_uuid.uuid_len);
#else
}
errcode_t ret = 0;
ret = gatts_notify_indicate(g_ble_server_id, g_ble_conn_id, ¶m);
- printf("ble_cywee_server_send_input_report: 0x%x g_ble_conn_id:%d g_cywee_notify_report_att_hdl:%d\r\n",ret,g_ble_conn_id,g_cywee_notify_report_att_hdl);
+ // printf("ble_cywee_server_send_input_report: 0x%x g_ble_conn_id:%d g_cywee_notify_report_att_hdl:%d\r\n",ret,g_ble_conn_id,g_cywee_notify_report_att_hdl);
bt_os_free(param.value);
return ERRCODE_BT_SUCCESS;
}
//协议接收client下发的数据接口
void cywee_recv_cmd_data(uint8_t *buf, uint16_t event_size,uint16_t handle)
{
- if(buf != NULL)
- printf("cywee_recv_cmd_data len %d , handle 0x%X ,*buf 0x%02X\r\n",event_size,handle,*buf);
+ if(buf == NULL)
+ return;
+ // printf("cywee_recv_cmd_data len %d , handle 0x%X ,*buf 0x%02X\r\n",event_size,handle,*buf);
/****此处为接收指令,处理后反馈结果的参考**/
- // cywee_set_log_switch(*buf);
+ cywee_set_log_switch(*buf);
/*****参考结束****/
}
int CWM_OS_dbgOutput(const char * format)
{
- PRINT("%s", format);
+ printf("%s", format);
#ifdef SUPPORT_CYWEE_BLE_SERVICE
if(cywee_get_log_flag())
ble_cywee_server_send_input_report((uint8_t *)format,strlen(format));
//CWM_OS_dbgPrintf("[DBG] %s %d\n", __func__,__LINE__);
// cywee_restoreData();
+ do_custom_fileoperate_service_check_msg(CUSTOM_FILEOPERATE_MSG_TYPE_SPORTDATA_READ, NULL, 0);
+ do_custom_fileoperate_service_check_msg(CUSTOM_FILEOPERATE_MSG_TYPE_SLEEPDATA_READ, NULL, 0);
+ do_custom_fileoperate_service_check_msg(CUSTOM_FILEOPERATE_MSG_TYPE_NAPDATA_READ, NULL, 0);
+
cywee_set_user_info();
cywee_activity_mode_change(SPORT_ACTIVE_MODE_NORMAL);
// cywee_register_msg_callback(cywee_msg_callback);
do_cywee_service_check_msg(CYWEE_SERVICE_CMD_START_CHECK, NULL);
- do_custom_fileoperate_service_check_msg(CUSTOM_FILEOPERATE_MSG_TYPE_SPORTDATA_READ, NULL, 0);
- do_custom_fileoperate_service_check_msg(CUSTOM_FILEOPERATE_MSG_TYPE_SLEEPDATA_READ, NULL, 0);
- do_custom_fileoperate_service_check_msg(CUSTOM_FILEOPERATE_MSG_TYPE_NAPDATA_READ, NULL, 0);
return ERRCODE_SUCC;
}
${CMAKE_CURRENT_SOURCE_DIR}/sh5001/sh5001.c
${CMAKE_CURRENT_SOURCE_DIR}/service/gyro_at_cmd.c
${CMAKE_CURRENT_SOURCE_DIR}/service/gyro_service.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/service/gyro_hal.c
)
set(PUBLIC_HEADER
${CMAKE_CURRENT_SOURCE_DIR}/sh5001
)
set(PUBLIC_DEFINES
SUPPORT_AT_GYRO
- ENABLE_GYRO
)
set(PRIVATE_HEADER
* @Author: penglei 1624952103@qq.com
* @Date: 2024-12-16 20:49:09
* @LastEditors: penglei 1624952103@qq.com
- * @LastEditTime: 2025-01-04 17:01:37
+ * @LastEditTime: 2025-05-12 17:47:30
* @FilePath: /sdk615/code/sdk/drivers/peripheral/GYRO/service/lqbp_at_cmd.c
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
#include "at_cmd_api.h"
#include "pm_control.h"
#include "gyro_service.h"
-#include "sh5001.h"
+#include "gyro_hal.h"
#define ARRAY_COUNT(array) (sizeof(array) / sizeof(array[0]))
#define GYRO_MAX_ARGC 8
UNUSED(strCommonCmd);
UNUSED(paraLen);
UNUSED(para);
- // do_lqbp_service_check_msg(GYRO_SERVICE_CMD_START_CHECK);
- SH5001_init();
+ gyro_start();
return ERRCODE_SUCC;
}
static uint32_t gyro_stop_test(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
UNUSED(strCommonCmd);
UNUSED(paraLen);
UNUSED(para);
- // do_lqbp_service_check_msg(GYRO_SERVICE_CMD_STOP_CHECK);
+ gyro_stop();
return ERRCODE_SUCC;
}
static const at_cmd_table_t g_gyro_cmd[] = {
--- /dev/null
+/*
+ * @Author: penglei 1624952103@qq.com
+ * @Date: 2025-05-12 09:59:09
+ * @LastEditors: penglei 1624952103@qq.com
+ * @LastEditTime: 2025-05-12 17:45:29
+ * @FilePath: /sdk615/code/sdk/zhihui/drivers/gyro/service/gyro_hal.c
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AEin
+ */
+#include <stdio.h>
+#include <stdbool.h>
+#include "gyro_hal.h"
+
+#ifdef GYRO_SH5001
+#include "sh5001.h"
+#endif
+
+void gyro_power_on(void)
+{
+#ifdef GYRO_SH5001
+ if(SH5001_init() == SH5001_TRUE)
+ printf("sh5001 init successful \n");
+ else
+ printf("sh5001 init failed \n");
+
+ if(SH5001_SwitchPowerMode(SH5001_NORMAL_MODE) == SH5001_TRUE)
+ printf("sh5001 start successful \n");
+ else
+ printf("sh5001 start failed \n");
+#endif
+}
+
+void gyro_power_off(void)
+{
+#ifdef GYRO_SH5001
+ if(SH5001_SwitchPowerMode(SH5001_POWERDOWN_MODE) == SH5001_TRUE)
+ printf("sh5001 stop successful \n");
+ else
+ printf("sh5001 stop failed \n");
+#endif
+}
+
+void gyro_check(void)
+{
+#ifdef GYRO_SH5001
+ SH5001_ReadFIFO();
+#endif
+}
+
+bool gyro_check_exist(void)
+{
+#ifdef GYRO_SH5001
+ if(gyro_get_chip_id() != SH5001_ID)
+ return false;
+ else
+ return true;
+#endif
+ return false;
+}
+
+gyro_data_t gyro_get_data(void)
+{
+ gyro_data_t data = {0};
+#ifdef GYRO_SH5001
+ data = sh5001_get_gyro_data();
+ // printf("%.3f %.3f %.3f\r\n",data.x,data.y,data.z);
+#endif
+ return data;
+}
+
+uint8_t gyro_get_chip_id(void)
+{
+#ifdef GYRO_SH5001
+ return SH5001_get_chip_id();
+#endif
+ return 0;
+}
\ No newline at end of file
--- /dev/null
+/*
+ * @Author: penglei 1624952103@qq.com
+ * @Date: 2025-05-12 10:00:46
+ * @LastEditors: penglei 1624952103@qq.com
+ * @LastEditTime: 2025-05-23 14:14:26
+ * @FilePath: /sdk615/code/sdk/zhihui/drivers/gyro/service/gyro_hal.h
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+#ifndef GYRO_HAL_H__
+#define GYRO_HAL_H__
+
+#ifdef __cplusplus
+#if __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+#endif /* __cplusplus */
+
+#include "stdint.h"
+#include "errcode.h"
+#include <stdbool.h>
+
+typedef struct {
+ float x;
+ float y;
+ float z;
+} gyro_data_t;
+
+
+void gyro_power_on(void);
+void gyro_power_off(void);
+void gyro_check(void);
+gyro_data_t gyro_get_data(void);
+uint8_t gyro_get_chip_id(void);
+bool gyro_check_exist(void);
+
+#ifdef __cplusplus
+#if __cplusplus
+}
+#endif /* __cplusplus */
+#endif /* __cplusplus */
+
+#endif
\ No newline at end of file
#include "input_app.h"
#include "cmsis_os2.h"
#include "custom_utils.h"
-#include "sh5001.h"
+#include "gyro_hal.h"
#include "gyro_service.h"
+#ifdef ROTARYENCODER_MIXO
+#include "mixo_service.h"
+#endif
// #include "custom_runtime.h"
/***
* 其他cmd在Header里定义,对外开放
*/
#define GYRO_SERVICE_CMD_TIMER_CHECK 0x11
-#define GYRO_CHECK_MS 30
-
static bool g_gyro_service_initialled = false;
-osTimerId_t g_gyro_service_timer = NULL;
static bool g_gyro_sensor_exist = false;
-static bool g_bat_timer_is_running = false;
static unsigned long g_app_queue= 0xFFFFFFFF;
-static bool gyro_service_running_stat = false;
-
-static void gyro_service_check_timer_callback(void* data);
-static void gyro_service_timer_start_check(uint32_t rtc_ms)
-{
-
- if (g_bat_timer_is_running )
- osTimerStop(g_gyro_service_timer);
-
- if (gyro_service_running_stat == true)
- osTimerStart(g_gyro_service_timer, rtc_ms);
-
- g_bat_timer_is_running = true;
-
-}
void do_gyro_service_check_msg(int cmd);
-static void gyro_service_check_timer_callback(void * data)
-{
- unused(data);
-
- g_bat_timer_is_running = false;
-
- if(gyro_service_running_stat == true){
- // mmc5603_check(); //此处只能直接加到timer callback中,采用queue的话,新能跟不上,系统资源会挂掉。
- do_gyro_service_check_msg(GYRO_SERVICE_CMD_TIMER_CHECK);
- // gyro_service_timer_start_check(gyro_CHECK_MS);
- }
-
-
-
-}
-void uapi_gyro_service_deinit(void)
-{
- /* Stop the time and clear the pin map */
- osTimerStop(g_gyro_service_timer);
- osTimerDelete(g_gyro_service_timer);
-
- g_bat_timer_is_running = false;
- g_gyro_service_timer = NULL;
-}
-
-
-
void do_gyro_service_check_msg(int cmd)
{
int ret;
if (mail.comm.app == GYRO_SERVICE_CMD_TIMER_CHECK) {
gyro_check();
}else if (mail.comm.app == GYRO_SERVICE_CMD_START_CHECK){
- gyro_start();
- LOS_Mdelay(30);
- gyro_service_running_stat = true;
- gyro_service_timer_start_check(GYRO_CHECK_MS);
+ gyro_power_on();
}else if (mail.comm.app == GYRO_SERVICE_CMD_STOP_CHECK){
- gyro_service_running_stat = false;
- osTimerStop(g_gyro_service_timer);
- gyro_stop();
- LOS_Mdelay(20);
+ gyro_power_off();
}
}
}
-#define GYRO_BOARD_TASK_SIZE 0x1000
+#define GYRO_BOARD_TASK_SIZE 0x500
errcode_t uapi_gyro_service_init(void)
{
PRINT("uapi_gyro_service_init !\r\n");
if(!gyro_check_exist())
{
- //TODO 设置气压计检测是否存在标识
+ //TODO 设置陀螺仪检测是否存在标识
PRINT("gyro not found!\r\n");
return ERRCODE_FAIL;
}
g_gyro_sensor_exist = true;
+ gyro_power_off();
+
app_task_definition_t taskcfg={0};
taskcfg.create_queue_handle = create_gyro_queue;
taskcfg.attr.name="gyro_service";
return ERRCODE_FAIL;
}
- g_gyro_service_timer = osTimerNew((osTimerFunc_t)gyro_service_check_timer_callback, osTimerPeriodic, NULL, NULL);
-
-
return ERRCODE_SUCC;
}
-// void gyro_service_service_resume(void)
-// {
-// MMC_LOG("gyro_service_service resume!\r\n");
-// gyro_service_check_timer_callback(0);
-// }
-// void gyro_service_service_suspend(void)
-// {
-// MMC_LOG("gyro_service_service suspend!\r\n");
-// }
\ No newline at end of file
+void gyro_int_callback(pin_t pin, uintptr_t param)
+{
+ // PRINT("gyro_int_callback %d 0x%X\n",pin,param);
+ uapi_gpio_clear_interrupt(pin);
+ do_gyro_service_check_msg(GYRO_SERVICE_CMD_TIMER_CHECK);
+}
+
+void gyro_start(void)
+{
+ do_gyro_service_check_msg(GYRO_SERVICE_CMD_START_CHECK);
+#ifdef ROTARYENCODER_MIXO
+ mixo_stop();
+#endif
+}
+
+void gyro_stop(void)
+{
+ do_gyro_service_check_msg(GYRO_SERVICE_CMD_STOP_CHECK);
+#ifdef ROTARYENCODER_MIXO
+ mixo_start();
+#endif
+}
+/*
+ * @Author: penglei 1624952103@qq.com
+ * @Date: 2024-12-23 15:12:01
+ * @LastEditors: penglei 1624952103@qq.com
+ * @LastEditTime: 2025-05-12 17:47:11
+ * @FilePath: /sdk615/code/sdk/zhihui/drivers/gyro/service/gyro_service.h
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
/**
* Copyright (c) @CompanyNameMagicTag 2022-2022. All rights reserved. \n
*
#include "stdint.h"
#include "errcode.h"
-
+#include "platform_core.h"
#define GYRO_SERVICE_CMD_START_CHECK 0x12
#define GYRO_SERVICE_CMD_STOP_CHECK 0x13
errcode_t uapi_gyro_service_init(void);
void uapi_gyro_service_deinit(void);
void do_gyro_service_check_msg(int cmd);
-
-
+void gyro_int_callback(pin_t pin, uintptr_t param);
+void gyro_start(void);
+void gyro_stop(void);
#ifdef __cplusplus
#if __cplusplus
}
\r
#define SH5001_I2C_BUS I2C_BUS_2\r
\r
+static gyro_data_t gyro_data = {0};\r
+\r
/******************************************************************\r
* Description: I2C or SPI bus interface functions and delay time function\r
*\r
\r
SH5001_FIFO_Read_Data(fifoData, fifoEntriesCount);\r
\r
- printf("fc %d\r\n", fifoEntriesCount);\r
+ // printf("fc %d\r\n", fifoEntriesCount);\r
\r
for(i = 0; i < dataGroup; i++) \r
{ \r
gyroData[1] = ((short)fifoData[j+9] << 8) | fifoData[j+8];\r
gyroData[2] = ((short)fifoData[j+11] << 8) | fifoData[j+10]; \r
\r
- printf("%d %d %d %d %d %d\r\n", accData[0], accData[1], accData[2],gyroData[0], gyroData[1], gyroData[2]);\r
+ gyro_data.x = (float)gyroData[0];\r
+ gyro_data.y = (float)gyroData[1];\r
+ gyro_data.z = (float)gyroData[2];\r
+\r
+ // printf("%d %d %d %d %d %d\r\n", accData[0], accData[1], accData[2],gyroData[0], gyroData[1], gyroData[2]);\r
\r
j = j + SH5001_WATERMARK_DIV;\r
} \r
\r
\r
// clear INT \r
- // SH5001_INT_Read_Status01();\r
+ SH5001_INT_Read_Status01();\r
\r
\r
} \r
* return: SH5001_TRUE or SH5001_FALSE\r
*\r
******************************************************************/\r
+\r
+uint8_t SH5001_get_chip_id(void)\r
+{\r
+ unsigned char regData = 0;\r
+ unsigned char i = 0;\r
+\r
+ // SH5001 chipID = 0xA1; \r
+ while((regData != 0xA1U) && (i++ < 3U))\r
+ {\r
+ SH5001_read(SH5001_ADDRESS, SH5001_CHIP_ID, 1, ®Data); \r
+ if((i == 3) && (regData != 0xA1U))\r
+ {\r
+ printf("SH5001 init fail, Chip ID = 0x%x\r\n", regData);\r
+ return SH5001_FALSE;\r
+ } \r
+ }\r
+ printf("SH5001 Chip ID = 0x%x\r\n", regData);\r
+ return regData;\r
+}\r
+\r
unsigned char SH5001_init(void) \r
{\r
unsigned char regData = 0;\r
int sh5001_get_version(void)\r
{\r
return MCU_VERSION_SH5001;\r
+}\r
+\r
+gyro_data_t sh5001_get_gyro_data(void)\r
+{\r
+ gyro_data_t data = gyro_data;\r
+ return data;\r
}
\ No newline at end of file
#ifndef __SH5001_H \r
#define __SH5001_H\r
\r
-//#define SH5001_FIFO_WM_INT\r
+#include "gyro_hal.h"\r
+\r
+#define SH5001_FIFO_WM_INT\r
//#define SH5001_ACTIVITY_INT\r
//#define SH5001_DATA_READY_INT\r
\r
******************************************************************/\r
#define SH5001_ADDRESS (0x36U) \r
#define SENODIA_VDD_3V3 1\r
+#define SH5001_ID 0xA1\r
\r
/******************************************************************\r
* SH5001 Registers Macro Definitions \r
extern void SH5001_initFIFO(void); \r
\r
extern void SH5001_ReadFIFO(void); \r
- \r
+\r
+unsigned char SH5001_get_chip_id(void);\r
+gyro_data_t sh5001_get_gyro_data(void);\r
#endif\r
\r
static osTimerId_t g_pah8009_timer = NULL;\r
\r
static uint8_t time_cnt = 0;\r
+static uint8_t wear_cnt = 0;\r
\r
static int history_wear_status = -1;\r
\r
-\r
-#if POLLING_MODE\r
static int time_out = 40;\r
-#endif\r
+\r
\r
static uint8_t hrs_num = 0;\r
static int32_t sum_hrs = 0;\r
{\r
if(history_wear_status != wear_status)\r
{\r
+ if(uapi_dev_runtime_get_train_status())\r
+ {\r
+ // printf("wear_cnt : %d\n",wear_cnt);\r
+ wear_cnt++;\r
+ if(wear_cnt < 50)\r
+ return;\r
+ }\r
+ wear_cnt = 0;\r
history_wear_status = wear_status;\r
#ifdef SUPPORT_CYWEE_SERVICE\r
cywee_wear_status_update((uint8_t *)&history_wear_status);\r
#endif\r
- // if(wear_status != 1)\r
- // {\r
- // pah8009_unwearstatus_update();\r
- // }\r
+ if(history_wear_status != 1)\r
+ {\r
+ // pah8009_unwearstatus_update();\r
+ avg_hrs = 0;\r
+ }\r
}\r
+ else\r
+ wear_cnt = 0;\r
\r
}\r
\r
left = 0;\r
right = -1;\r
avg_hrs = 0;\r
+ wear_cnt = 0;\r
}\r
\r
void ppg_interrupt_handle(void)\r
{\r
int32_t min_hrs = 0;\r
int32_t max_hrs = 0;\r
- if(hrs_num == 7)\r
+ if(hrs_num == 5)\r
{\r
sum_hrs -= hrs_data[left];\r
hrs_data[left] = 0;\r
left++;\r
- left = left % 7;\r
+ left = left % 5;\r
hrs_num--;\r
}\r
\r
hrs_num++;\r
right++;\r
- right = right % 7;\r
+ right = right % 5;\r
\r
hrs_data[right] = hrs;\r
sum_hrs += hrs_data[right]; \r
#ifdef SUPPORT_PPG_SERVICE\r
time_cnt++;\r
\r
- if(time_cnt >= 15) \r
+ if(time_cnt >= 20) \r
{\r
// ppg_msg_callback_t func = ppg_get_send_msg_callback_func();\r
\r
ble_ppgtest_server_send_input_report(&avg_hrs,1);\r
}\r
#endif\r
+\r
+#ifdef SUPPORT_CYWEE_SERVICE\r
+ // if(uapi_dev_runtime_get_train_status())\r
+ {\r
+ do_cywee_service_check_msg(CYWEE_SERVICE_CMD_CHECK_ACC, NULL); // 检查gsensor是否停止\r
+ }\r
+#endif\r
}\r
\r
\r
ppg_mems_data.MEMS_Data[0] = mems_data[0] * 2048 / 10;//ReadGSensorX();\r
ppg_mems_data.MEMS_Data[1] = mems_data[1] * 2048 / 10;//ReadGSensorY();\r
ppg_mems_data.MEMS_Data[2] = mems_data[2] * 2048 / 10;//ReadGSensorZ();\r
+\r
+ // ppg_mems_data.MEMS_Data[0] = mems_data[0] * 4096 / 10;//ReadGSensorX();\r
+ // ppg_mems_data.MEMS_Data[1] = mems_data[1] * 4096 / 10;//ReadGSensorY();\r
+ // ppg_mems_data.MEMS_Data[2] = mems_data[2] * 4096 / 10;//ReadGSensorZ();\r
+\r
// printf("x:%f y:%f z:%f\n",ppg_mems_data.MEMS_Data[0],ppg_mems_data.MEMS_Data[1],ppg_mems_data.MEMS_Data[2]);\r
ppg_mems_data.duration = duration;\r
\r
\r
}\r
\r
+void pah8009_check_int(void)\r
+{\r
+ if(work_mode != 1)\r
+ {\r
+ // printf("work_mode != 1\n");\r
+ return;\r
+ }\r
+\r
+ if(!timeout)\r
+ {\r
+ // printf("pah8009_check_int \n");\r
+#ifdef SUPPORT_PPG_SERVICE\r
+ send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_INT_HANDLER);\r
+#endif\r
+\r
+ }\r
+ else\r
+ {\r
+ timeout = 0;\r
+ }\r
+}\r
+\r
void pah8009_timer_handler(void)\r
{\r
ppg_sensor_task_polling();\r
\r
static void pah8009_timer_callback(void)\r
{\r
- // printf("pah8009_timer_callback \n");\r
-#ifdef SUPPORT_PPG_SERVICE\r
- send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_DO_PPG_HRS_TIMER_CALLBACK);\r
-#endif\r
+ printf("pah8009_timer_callback \n");\r
+// #ifdef SUPPORT_PPG_SERVICE\r
+// send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_CHECK_INT);\r
+// #endif\r
+ pah8009_check_int();\r
}\r
\r
static void pah8009_timer_init(void)\r
g_pah8009_timer = osTimerNew((osTimerFunc_t)pah8009_timer_callback, osTimerPeriodic, NULL, NULL);\r
}\r
\r
-void pah8009_check_int(void)\r
-{\r
-#if INTERRUPT_MODE\r
- if(work_mode != 1)\r
- {\r
- // printf("work_mode != 1\n");\r
- return;\r
- }\r
-\r
- if(!timeout)\r
- {\r
- // printf("pah8009_check_int \n");\r
- pah8009_int_handler();\r
- }\r
- else\r
- {\r
- timeout = 0;\r
- }\r
-#endif\r
-}\r
\r
void pah8009_reset(void)\r
{\r
// printf("mode : %s ,enable : %d\n",mode,enable);\r
if(!enable)\r
{\r
-#if POLLING_MODE\r
- if(g_pah8009_timer != NULL)\r
+\r
+ if(g_pah8009_timer != NULL && work_mode < 3 && work_mode > 0)\r
osTimerStop(g_pah8009_timer);\r
-#endif\r
+\r
pah_sensor_stop();\r
work_mode = 0;\r
if(uapi_dev_runtime_get_sleep_monitoring_status() && uapi_dev_runtime_get_hrs_passivity_flag())\r
}\r
else\r
{\r
-#if POLLING_MODE\r
- pah8009_timer_init();\r
-#endif\r
-\r
- time_cnt = 0;\r
-\r
if (strcmp(mode, "hrs") == 0) {\r
pah_sensor_init(diw_4mm_g_ir_hrd);\r
// auto_mode_sensor_start();\r
work_mode = 1;\r
// touch_only_sensor_start();\r
ppg_only_sensor_start();\r
-#if POLLING_MODE\r
- time_out = 40;\r
-#endif\r
+\r
} else if (strcmp(mode, "hrv") == 0) {\r
// md = HRV_MODE;\r
} else if (strcmp(mode, "spo2") == 0) {\r
pah_sensor_init(diw_4mm_ir_r_ir_spo2);\r
ppg_only_sensor_start();\r
work_mode = 2;\r
-#if POLLING_MODE\r
- time_out = 40;\r
-#endif\r
} else if (strcmp(mode, "leaklight") == 0) {\r
// md = FT_LEAK_LIGHT_MODE;\r
factory_test_mode(factory_test_leak_light_target_sample, 0, 0, 0, 0);\r
// extern void test_library_HRD(void);\r
// test_library_HRD();\r
+ work_mode = 4;\r
} else if (strcmp(mode, "wear") == 0) {\r
pah_sensor_init(diw_4mm_g_ir_hrd);\r
touch_only_sensor_start();\r
-#if POLLING_MODE\r
- time_out = 5000;\r
-#endif\r
+ work_mode = 3;\r
}\r
-#if POLLING_MODE\r
- if(g_pah8009_timer != NULL)\r
+\r
+ if(work_mode < 3 && work_mode > 0)\r
+ pah8009_timer_init();\r
+\r
+ time_cnt = 0;\r
+\r
+ if(g_pah8009_timer != NULL && work_mode < 3 && work_mode > 0)\r
osTimerStart(g_pah8009_timer,time_out);\r
-#endif\r
+\r
}\r
}\r
\r
#define ENABLE_AE_RECONVERGENCE 1\r
\r
\r
-#define PAH_800x_ENABLE_DEBUG_PRINT\r
-#define PAH_800x_ENABLE_LOG_PRINT\r
+// #define PAH_800x_ENABLE_DEBUG_PRINT\r
+// #define PAH_800x_ENABLE_LOG_PRINT\r
\r
\r
#ifdef PAH_800x_ENABLE_LOG_PRINT\r
* This definition will enable the corresponding demo functionin main.c\r
* If select INT mode, then slect following INT configuration type\r
*/\r
-#define INTERRUPT_MODE 0\r
-#define POLLING_MODE 1\r
+#define INTERRUPT_MODE 1\r
+#define POLLING_MODE 0\r
#define Test_pattern_mode 0\r
\r
/*\r