'DOWNLOAD_GNSS_SWITCH',
'TPTYPE_CST86XX',
'NANDFLASH_F35UQA',
- #'PPG_GH3X2X',
+ 'PPG_PAH8009',
'GYRO_SH5001',
'ROTARYENCODER_MIXO',
'ENABLE_GYRO',
{ S_AGPIO_R3, HAL_GPIO_DIRECTION_INPUT, NULL, GPIO_INTERRUPT_RISING_EDGE, bp_int_callback },
#endif
#ifdef SUPPORT_PPG_SERVICE
+#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},
#endif
+#endif
#ifdef ROTARYENCODER_MIXO
- // { S_AGPIO_L0, HAL_GPIO_DIRECTION_INPUT, NULL, GPIO_INTERRUPT_DEDGE, mixo_int_callback},
+ // { S_AGPIO_L0, HAL_GPIO_DIRECTION_INPUT, NULL, GPIO_INTERRUPT_FALLING_EDGE, mixo_int_callback},
#endif
};
/**
* @Author: penglei 1624952103@qq.com\r
* @Date: 2025-01-16 12:35:15\r
* @LastEditors: penglei 1624952103@qq.com\r
- * @LastEditTime: 2025-07-04 17:18:32\r
+ * @LastEditTime: 2025-07-10 10:45:40\r
* @FilePath: /sdk615/code/sdk/zhihui/drivers/bp/bn02/bn02.c\r
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE\r
*/\r
#define BN02_I2C_BUS I2C_BUS_0\r
#define I2C_ADDR_BN02_W 0x0a\r
#define I2C_ADDR_BN02_R 0x0b\r
-#define P_EN S_AGPIO_L19\r
-#define P_INT S_AGPIO_R3\r
+#define BP_EN S_AGPIO_L19\r
+#define BP_INT S_AGPIO_R3\r
\r
#define POWER_EN S_AGPIO_R0\r
\r
uapi_gpio_set_dir(POWER_EN, GPIO_DIRECTION_OUTPUT);\r
uapi_gpio_set_val(POWER_EN, GPIO_LEVEL_HIGH);\r
LOS_Mdelay(1);\r
- uapi_pin_set_mode(P_EN, (pin_mode_t)HAL_PIO_FUNC_GPIO);\r
- uapi_gpio_set_dir(P_EN, GPIO_DIRECTION_OUTPUT);\r
- uapi_gpio_set_val(P_EN, GPIO_LEVEL_HIGH);\r
+ uapi_pin_set_mode(BP_EN, (pin_mode_t)HAL_PIO_FUNC_GPIO);\r
+ uapi_gpio_set_dir(BP_EN, GPIO_DIRECTION_OUTPUT);\r
+ uapi_gpio_set_val(BP_EN, GPIO_LEVEL_HIGH);\r
// delay_ms(20);\r
LOS_Mdelay(50);\r
}\r
else\r
{\r
- uapi_pin_set_mode(P_EN, (pin_mode_t)HAL_PIO_FUNC_GPIO);\r
- uapi_gpio_set_dir(P_EN, GPIO_DIRECTION_OUTPUT);\r
- uapi_gpio_set_val(P_EN, GPIO_LEVEL_LOW);\r
+ uapi_pin_set_mode(BP_EN, (pin_mode_t)HAL_PIO_FUNC_GPIO);\r
+ uapi_gpio_set_dir(BP_EN, GPIO_DIRECTION_OUTPUT);\r
+ uapi_gpio_set_val(BP_EN, GPIO_LEVEL_LOW);\r
LOS_Mdelay(1);\r
uapi_pin_set_mode(POWER_EN, (pin_mode_t)HAL_PIO_FUNC_GPIO);\r
uapi_gpio_set_dir(POWER_EN, GPIO_DIRECTION_OUTPUT);\r
\r
void bn02_int_init(void)\r
{\r
- uapi_pin_set_ie(P_INT,HAL_PIO_IE_ENBALE);\r
+ uapi_pin_set_ie(BP_INT,HAL_PIO_IE_ENBALE);\r
}\r
\r
void bn02_int_deinit(void)\r
{\r
- uapi_pin_set_ie(P_INT,HAL_PIO_IE_DISABLE);\r
+ uapi_pin_set_ie(BP_INT,HAL_PIO_IE_DISABLE);\r
}\r
\r
void bn02_int_handle(void)\r
// printf("0x%x 0x%x 0x%x 0x%x\n",i,bn02_buf[i],bn02_buf[i+1],bn02_buf[i+2],reply_data[cnt]);\r
}\r
\r
- do_bp_tcp_server_send_data(BP_TCP_SERVICE_CMD_DATA_UPLOAD,(void *)reply_data,cnt);\r
+ if(uapi_cat1_get_power_stat())\r
+ do_bp_tcp_server_send_data(BP_TCP_SERVICE_CMD_DATA_UPLOAD,(void *)reply_data,cnt);\r
\r
if(bn02_data && fp)\r
{\r
-#define MAX_CNT 16 * 5 * 60
+// #define MAX_CNT 16 * 5 * 60
+#define MAX_CNT 16 * 5 * 50
+
+
static unsigned long g_app_queue= 0xFFFFFFFF;
static int *tcp_data = NULL;
static uint8_t LK_STATUS = 0;
static uint8_t BP_GET_STATUS = 0;
-static int bp_sbp = 0;
-static int bp_dbp = 0;
-static int bp_pressure = 0;
-static int bp_fatigue = 0;
-static int bp_emo = 0;
+static bp_data_t bp_data = {0};
static char *imei = NULL;
void bp_set_adjust_data(int sbp,int dbp)
{
- bp_sbp = sbp;
- bp_dbp = dbp;
+ bp_data.sbp = sbp;
+ bp_data.dbp = dbp;
}
void bp_set_measure_type(uint8_t type)
bp_measure_type = type;
}
-void bp_get_data(int *sbp,int *dbp)
+void bp_get_data(bp_data_t *data)
{
- if(sbp == NULL || dbp == NULL)
+ if(data == NULL)
return;
- *sbp = bp_sbp;
- *dbp = bp_dbp;
- bp_sbp = 0;
- bp_dbp = 0;
+
+ memcpy_s(data,sizeof(bp_data_t),&bp_data,sizeof(bp_data_t));
}
static void bp_save_request_code(char *reqeust_code,int len)
if (sbp && dbp && emo && pressure && fatigue)
{
printf("sbp: %d\n", sbp->valueint);
- bp_sbp = sbp->valueint;
+ bp_data.sbp = sbp->valueint;
printf("dbp: %d\n", dbp->valueint);
- bp_dbp = dbp->valueint;
+ bp_data.dbp = dbp->valueint;
- printf("emo: %d\n", emo->valueint);
- bp_emo = emo->valueint;
+ printf("emo: %s\n", emo->valuestring);
+ memcpy_s(bp_data.emo,sizeof(bp_data.emo),emo->valuestring,strlen(emo->valuestring));
printf("pressure: %d\n", pressure->valueint);
- bp_pressure = pressure->valueint;
+ bp_data.pressure = pressure->valueint;
printf("fatigue: %d\n", fatigue->valueint);
- bp_fatigue = fatigue->valueint;
+ bp_data.fatigue = fatigue->valueint;
BP_GET_STATUS = 1;
}
}
- temp_len += snprintf(json_data + temp_len, json_len - temp_len,"\"ppg_fs\":\"%d\"}", 81);
+ // temp_len += snprintf(json_data + temp_len, json_len - temp_len,"\"ppg_fs\":\"%d\"}", 81);
// if(bp_measure_type == BP_ADJUST)
// {
- // temp_len += snprintf(json_data + temp_len, json_len - temp_len, "\"cal_value\":[%d,%d],", 120,80);
- // bp_sbp = 0;
- // bp_dbp = 0;
+ //
+ if(bp_measure_type == BP_ADJUST)
+ {
+ temp_len += snprintf(json_data + temp_len, json_len - temp_len,"\"ppg_fs\":\"%d\",", 81);
+ temp_len += snprintf(json_data + temp_len, json_len - temp_len, "\"cal_value\":[%d,%d]\"}",120,80);
+ }
+ else
+ {
+ temp_len += snprintf(json_data + temp_len, json_len - temp_len,"\"ppg_fs\":\"%d\"}", 81);
+ }
// }
// goto FAILED;
// }
- for(int i = 0; i < send_len; i += 512)
+ for(int i = 0; i < send_len; i += 1024)
{
- int chunk_size = (send_len - i > 512) ? 512 : send_len - i;
+ int chunk_size = (send_len - i > 1024) ? 1024 : send_len - i;
ret = tcp_send(g_listen_sock, send_str + i, chunk_size);
if(ret != 0)
void bp_tcp_data_clean(void)
{
+ memset(&bp_data,0,sizeof(bp_data));
if(tcp_data != NULL)
{
free(tcp_data);
* @Author: penglei 1624952103@qq.com
* @Date: 2025-02-14 10:30:32
* @LastEditors: penglei 1624952103@qq.com
- * @LastEditTime: 2025-07-02 14:04:37
+ * @LastEditTime: 2025-07-07 16:10:14
* @FilePath: /sdk615/code/sdk/zhihui/drivers/bp/service/bp_ble_service.h
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
uint32_t len;
} bp_tcp_data_mail_t;
+
+#pragma pack(1)
+typedef struct
+{
+ int sbp;
+ int dbp;
+ int pressure; //压力
+ int fatigue; //疲劳度
+ char emo[20]; //情绪
+}bp_data_t;
+#pragma pack()
+
#define BP_TCP_SERVICE_CMD_DATA_UPLOAD 0x1
#define BP_TCP_SERVICE_CMD_SERVER_INIT 0x2
#define BP_TCP_SERVICE_CMD_SERVER_DEINIT 0x3
int tcp_sign_up(void);
int bp_tcp_login(void);
void bp_activate_algorithm(void);
-void bp_get_data(int *sbp,int *dbp);
+void bp_get_data(bp_data_t *data);
void bp_set_measure_type(uint8_t type);
void bp_set_adjust_data(int sbp,int dbp);
* @Author: penglei 1624952103@qq.com
* @Date: 2024-03-13 15:08:38
* @LastEditors: penglei 1624952103@qq.com
- * @LastEditTime: 2025-06-25 15:10:29
+ * @LastEditTime: 2025-07-10 17:18:40
* @FilePath: /FD230/code/sdk/drivers/peripheral/ppg/hx3695/hx3695_hal.c
* @Description:
*
#elif defined PPG_GH3X2X
// chip_id = GH3X2X_AFE_GetChipId();
#endif
- ppg_power_off();
+ ppg_power_off();
return chip_id;
}
* @Author: penglei 1624952103@qq.com
* @Date: 2024-06-07 11:18:26
* @LastEditors: penglei 1624952103@qq.com
- * @LastEditTime: 2025-06-09 11:26:55
+ * @LastEditTime: 2025-07-09 16:12:34
* @FilePath: /FD230/code/sdk/drivers/peripheral/ppg/ppg/ppg_hal.h
* @Description:
*
#endif /* __cplusplus */
#include "stdint.h"
-#include "tyhx_hrs_custom.h"
+
#define AGC_TIMER_MODE 0
#define HRS_TIMER_MODE 1
#elif defined PPG_PAH8009
#define PPG_CHIP_ID 0x8008
#elif defined PPG_GH3X2X
-#define PPG_CHIP_ID GH3X2X_CHIP_ID
+#define PPG_CHIP_ID 0x3
#else
#define PPG_CHIP_ID 0
#endif
)
set(PUBLIC_DEFINES
- PPG_PAH8009
+
)
# use this when you want to add ccflags like -include xxx
false
)
+if("PPG_PAH8009" IN_LIST DEFINES)
+
find_library(LIB_PATH_SPO2 algorithm/pah_spo2/V703/libv703_0_1.a ${CMAKE_CURRENT_SOURCE_DIR})
find_library(LIB_PATH_HR algorithm/pah_hr/V303009/libv307009_4.a ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(${TARGET_NAME} PRIVATE -Wl,--whole-archive ${LIB_PATH_HR} ${LIB_PATH_SPO2} PRIVATE -Wl,--whole-archive)
+endif()
+
build_component()
PXIALG_API uint8_t PxiAlg_Entrance_0(pah8series_data_t *pah8series_data);\r
PXIALG_API uint8_t PxiAlg_Entrance(pah8series_data_t *pah8series_data);\r
PXIALG_API uint8_t PxiAlg_EntranceD(pah8series_data_t *pah8series_data);\r
-PXIALG_API uint32_t PxiAlg_Query_Mem_Size();\r
-PXIALG_API uint8_t PxiAlg_GetHrUpdateFlag();\r
+PXIALG_API uint32_t PxiAlg_Query_Mem_Size(void);\r
+PXIALG_API uint8_t PxiAlg_GetHrUpdateFlag(void);\r
\r
PXIALG_API void PxiAlg_SetData_Seg(pah8series_data_t *pah8series_data);\r
PXIALG_API uint8_t PxiAlg_Process_Seg(uint8_t *is_finished);\r
#include "pah800x_main.h"\r
#include "pah800x_bsp.h"\r
#include <math.h> \r
+#include "pxialg.h"\r
+#include "pxivar.h"\r
+\r
//#include "nrf_delay.h"\r
#define array_szie(arr) (sizeof(arr) / sizeof(arr[0]))\r
\r
-\r
-\r
-\r
void test_library_HRD(void)\r
{\r
int i = 0;\r
\r
return;\r
}\r
+\r
+void log_printf(char *s, float f)\r
+{\r
+ printf("%s: %f\n", s, f);\r
+}
\ No newline at end of file
{\r
touch_sensor_disable();\r
}\r
- pah_800x_deinit(&_main.pah_800x); \r
- \r
+\r
+ if(work_mode == 1)\r
+ hr_algorithm_disable();\r
+ else if(work_mode == 2)\r
+ spo2_algorithm_disable();\r
+\r
+ pah_800x_deinit(&_main.pah_800x); \r
+\r
+ hr = 0; \r
}\r
\r
void ppg_interrupt_handle(void)\r
} else if (strcmp(mode, "spo2") == 0) {\r
// md = SPO2_MODE;\r
pah_sensor_init(diw_4mm_ir_r_ir_spo2);\r
- auto_mode_sensor_start();\r
+ ppg_only_sensor_start();\r
work_mode = 2;\r
} else if (strcmp(mode, "leaklight") == 0) {\r
// md = FT_LEAK_LIGHT_MODE;\r
\r
\r
//static hr algotirhm\r
-// #include "pxialg.h"\r
+#include "pxialg.h"\r
\r
// spo2 algorithm\r
-// #include "pxialg_spo2.h"\r
+#include "pxialg_spo2.h"\r
\r
// Stress algorithm\r
-// #include "pxialg_hrv.h"\r
+#include "pxialg_hrv.h"\r
#ifdef PPG_MEMS_Synchronize\r
//MEMS-INT\r
#include "pxi_interp.h"\r
{
PRINT("uapi_ppg_service_init !\r\n");
- ppg_power_on();
-
if (ppg_get_chip_id() != PPG_CHIP_ID)
{
- ppg_power_off();
LOS_Mdelay(10);
- ppg_power_on();
if (ppg_get_chip_id() != PPG_CHIP_ID)
{
PRINT("ppg not exist!\r\n");
- ppg_power_off();
return ERRCODE_FAIL;
}
}
- ppg_power_off();
+
ppg_register_msg_callback(ppg_msg_callback);//注册驱动回调
// ppg_send_cmd_to_driver("wear",0);
CustomEventPublish(TOPIC_EVENT_NEXTDAY_UPDATE, NULL , 0);
//do_cywee_service_check_msg(CYWEE_SERVICE_CMD_RESET_DAILY_DATA,NULL);
}
+
+ // LOS_Msleep(1000);
+ // uapi_set4GCapability(true);
#ifdef A5133_DEMO_SERVER
uapi_button_register_event_cb(a5133_demo_msg_unbind_callback, BUTTON_PWR_CLICKUP_2);
a5133_demo_msg_change_callback();
return (ret>0) ? ret*-1: ret;
}
-
-errcode_t custom_i2c_transfer(uint16_t slaveAddr, uint16_t reg, int regLength, uint8_t *writeData, int writeDataSize, uint8_t *readData, int readDataSize, int busIndex)
+errcode_t custom_i2c_transfer(uint16_t slaveAddr,uint8_t *writeData, int writeDataSize, uint8_t *readData, int readDataSize, int busIndex)
{
+
+ uint8_t cnt = pm_veto_get_id_cnt(PM_ID_GSENSOR);
+ if (cnt == 0)
+ {
+ uapi_pm_add_sleep_veto(PM_ID_GSENSOR);
+ }
+
errcode_t ret;
uint32_t retry;
i2c_data_t data;
uint8_t *write_data = NULL;
int16_t write_len = 0;
- //custom_i2c_init();
- write_len = regLength + writeDataSize;
+ //custom_iic_init();
+ write_len = writeDataSize;
write_data = (uint8_t *)osal_kmalloc(write_len, OSAL_GFP_KERNEL);
if (write_data == NULL) {
PRINT(" send buff malloc fail!");
goto error;
}
- if( regLength == 2)
- {
- write_data[0] = ((uint8_t*)®)[0];
- write_data[1] = ((uint8_t*)®)[1];
- }else{
- write_data[0] = (uint8_t)reg;
- }
-
- ret = (uint32_t)memcpy_s(write_data + regLength, writeDataSize, writeData, writeDataSize);
+ ret = (uint32_t)memcpy_s(write_data, writeDataSize, writeData, writeDataSize);
if (ret != EOK) {
PRINT("send_buf content copy fail! ret=0x%x\n", ret);
goto free_mem;
}
}
if (ret != ERRCODE_SUCC) {
- PRINT("data read fail! ret=0x%x\n", ret);
+ PRINT("data read fail! ret=0x%x slaveAddr : 0x%x\n", ret,slaveAddr);
}
free_mem:
osal_kfree(write_data);
error:
+
+ cnt = pm_veto_get_id_cnt(PM_ID_GSENSOR);
+ if (cnt == 1)
+ {
+ uapi_pm_remove_sleep_veto(PM_ID_GSENSOR);
+ }
+
return (ret>0) ? ret*-1: ret;
}
void custom_i2c_reset(uint8_t i2cbus, uint16_t i2c_clock);
errcode_t custom_i2c_write_reg(uint16_t slaveAddr, uint16_t reg, int regLength, uint8_t *writeData, int writeDataSize, int busIndex);
errcode_t custom_i2c_read_regs(uint16_t slaveAddr, uint16_t reg, int regLength, uint8_t *readData, int readDataSize, int busIndex);
-errcode_t custom_i2c_transfer(uint16_t slaveAddr, uint16_t reg, int regLength, uint8_t *writeData, int writeDataSize, uint8_t *readData, int readDataSize, int busIndex);
+errcode_t custom_i2c_transfer(uint16_t slaveAddr,uint8_t *writeData, int writeDataSize, uint8_t *readData, int readDataSize, int busIndex);
errcode_t custom_i2c_test(void);
uint32_t custom_i2c_suspend(void);