{
if (toggleButtonOffline) {
if (toggleButtonOffline->GetState() == false) {
- send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_CLOSE_HRS_BLE);
+ uapi_dev_runtime_set_hrs_ble_status(0);
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"hrs_ble_switch false");
}
else {
- send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_OPEN_HRS_BLE);
+ uapi_dev_runtime_set_hrs_ble_status(1);
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"hrs_ble_switch true");
}
} else {
* @Author: penglei 1624952103@qq.com\r
* @Date: 2025-01-16 12:35:15\r
* @LastEditors: penglei 1624952103@qq.com\r
- * @LastEditTime: 2025-07-10 10:45:40\r
+ * @LastEditTime: 2025-07-15 17:48:37\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
}\r
\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
+ do_bp_tcp_server_send_data(BP_TCP_SERVICE_CMD_SEND_DATA,(void *)reply_data,cnt);\r
\r
if(bn02_data && fp)\r
{\r
(void)osSemaphoreRelease(ip_sem->dns_done_sem);
}
-int tcp_socket_init(void)
+int bp_tcp_socket_init(void)
{
uint8_t cnt = pm_veto_get_id_cnt(PM_ID_CAT1);
if (cnt == 0) {
}
-int tcp_send(int listen_socket, const char *data, size_t size)
+static int tcp_send(int listen_socket, const char *data, size_t size)
{
if (data == NULL || size == 0)
return -1;
* @param cnt int数据个数
* @return Base64编码后的长度,失败返回-1
*/
-int calculate_base64_length(int cnt)
+static int calculate_base64_length(int cnt)
{
if (cnt <= 0)
return -1;
return base64_length;
}
-static void upload_bp_data(int *data, int cnt)
+static void upload_bp_data(void)
{
#if 0
if (data == NULL || cnt == 0)
printf("free\n");
#else
- if (data == NULL || cnt == 0)
+ if (tcp_data == NULL || tcp_data_cnt == 0)
return;
+ if(LK_STATUS != 1)
+ {
+ printf("NOT LK\n");
+ return;
+ }
+
int ret = -1;
char *data_str = NULL;
int data_len = 0;
}
// 分配JSON缓冲区
- int json_len = 512 + calculate_base64_length(cnt);
+ int json_len = 512 + calculate_base64_length(tcp_data_cnt);
char *json_data = (char *)malloc(json_len);
if (json_data == NULL)
{
// printf("bp_measure_type : %d\n",bp_measure_type);
- for(int i = 0; i < cnt; i++)
+ for(int i = 0; i < tcp_data_cnt; i++)
{
- if(i == (cnt - 1))
+ if(i == (tcp_data_cnt - 1))
{
- temp_len += snprintf(json_data + temp_len, json_len - temp_len, "%d],", data[i]);
+ temp_len += snprintf(json_data + temp_len, json_len - temp_len, "%d],", tcp_data[i]);
}
else
{
- temp_len += snprintf(json_data + temp_len, json_len - temp_len, "%d,", data[i]);
+ temp_len += snprintf(json_data + temp_len, json_len - temp_len, "%d,", tcp_data[i]);
}
}
void do_bp_tcp_server_send_data(int cmd,int *data,uint32_t len)
{
- if((data == NULL || len == 0) && cmd == BP_TCP_SERVICE_CMD_DATA_UPLOAD)
+ if((data == NULL || len == 0) && cmd == BP_TCP_SERVICE_CMD_SEND_DATA)
return;
errcode_t ret;
if(tcp_data_cnt >= MAX_CNT)
{
- printf("tcp_data_cnt : %d\n",tcp_data_cnt);
- bp_stop();
+ return;
+ // printf("tcp_data_cnt : %d\n",tcp_data_cnt);
+ // bp_stop();
// for(int i = 0; i < tcp_data_cnt; i ++)
// {
// printf("data[%d]:%d\n",i,tcp_data[i]);
// }
// memset((void*)tcp_data,0,MAX_CNT * sizeof(int));
- LOS_Msleep(1000);
+ // LOS_Msleep(1000);
- if(LK_STATUS == 1)
- {
- upload_bp_data(tcp_data,tcp_data_cnt);
- // do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_BP_TEST, NULL, 0);
- }
+ // if(LK_STATUS == 1)
+ // {
+ // upload_bp_data(tcp_data,tcp_data_cnt);
+ // // do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_BP_TEST, NULL, 0);
+ // }
- else
- printf("NOT LK\n");
+ // else
+ // printf("NOT LK\n");
// LOS_Msleep(2000);
- bp_tcp_data_clean();
+ // bp_tcp_data_clean();
}
else
{
continue;
}
- if(mail.cmd == BP_TCP_SERVICE_CMD_DATA_UPLOAD)
+ if(mail.cmd == BP_TCP_SERVICE_CMD_SEND_DATA)
{
tcp_data_handler((int *)mail.data,mail.len);
}
{
bp_tcp_deinit();
}
+ else if(mail.cmd == BP_TCP_SERVICE_CMD_DATA_UPLOAD)
+ {
+ upload_bp_data();
+ bp_tcp_data_clean();
+ }
}
}
}
if (g_listen_sock < 0)
{
- g_listen_sock = tcp_socket_init();
+ g_listen_sock = bp_tcp_socket_init();
if (g_listen_sock < 0)
{
PRINT("wating tcp socket init\n");
#define BP_TCP_SERVICE_CMD_DATA_UPLOAD 0x1
#define BP_TCP_SERVICE_CMD_SERVER_INIT 0x2
#define BP_TCP_SERVICE_CMD_SERVER_DEINIT 0x3
+#define BP_TCP_SERVICE_CMD_SEND_DATA 0x4
void do_bp_tcp_server_send_data(int cmd,int *data,uint32_t len);
void tcp_recv_data_handler(const char *input, int input_len) ;
GU8 hal_gh3x2x_afe_i2c_write(GU8 device_id, const GU8 write_buffer[], GU16 length)\r
{\r
// custom_i2c_transfer(0x14,write_buffer, length, NULL, 0, GH3X2X_I2C_BUS);\r
- custom_i2c_write_reg(0x14, 0, 0, write_buffer, length, GH3X2X_I2C_BUS);\r
+ custom_i2c_write_reg(device_id, 0, 0, write_buffer, length, GH3X2X_I2C_BUS);\r
return 1;\r
}\r
\r
{\r
// custom_i2c_transfer(0x14,write_buffer, write_length, read_buffer, read_length, GH3X2X_I2C_BUS);\r
// custom_i2c_write_reg(0x14, 0, 0, write_buffer, length, GH3X2X_I2C_BUS);\r
- custom_i2c_read_regs(0x14, write_buffer, write_length, read_buffer,read_length, GH3X2X_I2C_BUS);\r
+\r
+ // printf("write_buffer[:0x%x%x]\n",write_buffer[0],write_buffer[1]);\r
+\r
+ custom_i2c_transfer(device_id,write_buffer, write_length, read_buffer, read_length, GH3X2X_I2C_BUS);\r
return 1;\r
}\r
\r
* @Author: penglei 1624952103@qq.com
* @Date: 2024-03-13 15:08:38
* @LastEditors: penglei 1624952103@qq.com
- * @LastEditTime: 2025-07-10 17:18:40
+ * @LastEditTime: 2025-07-15 12:13:23
* @FilePath: /FD230/code/sdk/drivers/peripheral/ppg/hx3695/hx3695_hal.c
* @Description:
*
#endif
#ifdef PPG_GH3X2X
-// #include "gh3x2x_afe_drv.h"
+#include "gh3x2x_afe_drv.h"
#endif
uapi_pin_set_mode(GPIO_PIN_PRG_RESET, (pin_mode_t)HAL_PIO_FUNC_GPIO);
uapi_gpio_set_dir(GPIO_PIN_PRG_RESET, GPIO_DIRECTION_OUTPUT);
uapi_gpio_set_val(GPIO_PIN_PRG_RESET, GPIO_LEVEL_HIGH);
-
+ LOS_Mdelay(10);
uapi_pin_set_mode(GPIO_PIN_PRG_LED_ON, (pin_mode_t)HAL_PIO_FUNC_GPIO);
uapi_gpio_set_dir(GPIO_PIN_PRG_LED_ON, GPIO_DIRECTION_OUTPUT);
uapi_gpio_set_val(GPIO_PIN_PRG_LED_ON, GPIO_LEVEL_HIGH);
- LOS_Mdelay(50);
+ LOS_Mdelay(100);
}
void ppg_power_off(void)
uapi_pin_set_mode(GPIO_PIN_PRG_RESET, (pin_mode_t)HAL_PIO_FUNC_GPIO);
uapi_gpio_set_dir(GPIO_PIN_PRG_RESET, GPIO_DIRECTION_OUTPUT);
uapi_gpio_set_val(GPIO_PIN_PRG_RESET, GPIO_LEVEL_LOW);
-
+ LOS_Mdelay(10);
uapi_pin_set_mode(GPIO_PIN_PRG_LED_ON, (pin_mode_t)HAL_PIO_FUNC_GPIO);
uapi_gpio_set_dir(GPIO_PIN_PRG_LED_ON, GPIO_DIRECTION_OUTPUT);
uapi_gpio_set_val(GPIO_PIN_PRG_LED_ON, GPIO_LEVEL_LOW);
- LOS_Mdelay(50);
+ LOS_Mdelay(100);
}
uint8_t ppg_get_hrs(void)
#elif defined PPG_PAH8009
pah8009_control(mode,enable);
#elif defined PPG_GH3X2X
- // gh3x2x_control(mode,enable);
+ gh3x2x_control(mode,enable);
#endif
if(!enable)
ppg_power_off();
// #include "sys_init.h"\r
// #include "cwm_api.h"\r
\r
-static uint8_t hrs_ble_falg = 0;\r
+\r
#define PPG_DATA_LEN_MAX 17\r
int32_t s_buf[256];\r
uint32_t cnt_num = 0;\r
}\r
}\r
\r
-void hx3695_set_hrs_ble_swtich(uint8_t cmd)\r
-{\r
- hrs_ble_falg = cmd;\r
- // PRINT("hrs_ble_falg : %d \n",hrs_ble_falg);\r
-}\r
-\r
-uint8_t hx3695_get_hrs_ble_swtich(void)\r
-{\r
- uint8_t cmd = hrs_ble_falg;\r
- return cmd;\r
-}\r
\r
void hx3695_wearstatus_update(void)\r
{\r
ble_rawdata_send_handler();\r
#endif\r
\r
- if(hrs_ble_falg)\r
+ if(uapi_dev_runtime_get_hrs_ble_status())\r
{\r
uint8_t encoded_hrm[PPG_DATA_LEN_MAX] = {0};//PPG_DATA_LEN_MAX>17会导致APP连接提示定义设备与所选类型不匹配\r
uint8_t red_bit = 0;\r
}\r
#endif\r
\r
-if(hrs_ble_falg)\r
+if(uapi_dev_runtime_get_hrs_ble_status())\r
{\r
\r
uint8_t encoded_hrm[PPG_DATA_LEN_MAX] = {0};//PPG_DATA_LEN_MAX>17会导致APP连接提示定义设备与所选类型不匹配\r
\r
void log_printf(char *s, float f)\r
{\r
- printf("%s: %f\n", s, f);\r
+ // printf("%s: %f\n", s, f);\r
}
\ No newline at end of file
#include "cywee_service.h"\r
#endif\r
#include "custom_runtime.h"\r
-\r
+#include "ppgBleService.h"\r
//============================================================================\r
// Static Global Variable\r
//============================================================================\r
\r
static int history_wear_status = -1;\r
\r
+static int data_cnt = 0;\r
+\r
//============================================================================\r
// Private function\r
//============================================================================\r
_main.hr_is_enabled = false;\r
}\r
\r
+\r
+\r
void hr_alg_task(void)\r
{\r
if(Check_alg_enable())\r
time_cnt++;\r
\r
ppg_msg_callback_t func = ppg_get_send_msg_callback_func();\r
-\r
+ int ii=0;\r
if(func != NULL && time_cnt >= 25)\r
{\r
uint8_t data = (uint8_t)hr;\r
// data = cywee_wear_status;\r
// func(PPG_MSG_TYPE_WEARSTAT_UPDATE, &data, 1);\r
time_cnt = 0;\r
+\r
+ data_cnt+=8;\r
+ \r
+ if(uapi_dev_runtime_get_hrs_ble_status())\r
+ {\r
+ uint8_t encoded_hrm[17] = {0};//PPG_DATA_LEN_MAX>17会导致APP连接提示定义设备与所选类型不匹配\r
+ \r
+ for(ii = 0; ii<8; ii++)\r
+ {\r
+\r
+ encoded_hrm[0] = 0x55;//心率标志位,一定要设置正确\r
+ encoded_hrm[1] = (uint8_t)(data_cnt - 8 + ii) % 256;//原始data_cnt会一直自加,但是这里只有一个字节,0-255循环\r
+ encoded_hrm[2] = (uint8_t)hr;//心率值\r
+\r
+ encoded_hrm[3] = 0; //绿灯原始数据\r
+ encoded_hrm[4] = 0; //绿灯原始数据\r
+ encoded_hrm[5] = 0; //绿灯原始数据\r
+\r
+ encoded_hrm[6] = 0; //ir原始数据\r
+ encoded_hrm[7] = 0; //ir原始数据\r
+ encoded_hrm[8] = 0; //ir原始数据\r
+\r
+ encoded_hrm[9] = 0;//模拟x,1234换成填入自己的x数据\r
+ encoded_hrm[10] = 0;\r
+ encoded_hrm[11] = 0;//模拟y,-1234换成填入自己的y数据\r
+ encoded_hrm[12] = 0;\r
+ encoded_hrm[13] = 0;//模拟z,3987换成填入自己的z数据\r
+ encoded_hrm[14] = 0; \r
+ \r
+ encoded_hrm[15] = 0;//绿灯电流\r
+ encoded_hrm[16] = 0;//红外电流\r
+\r
+ // if(cm_custom_ble_service_on_flag())\r
+ ble_ppgtest_server_send_input_report(encoded_hrm,17);\r
+\r
+ // ble_op_att_send_data(ATT_CHARACTERISTIC_2a37_01_VALUE_HANDLE,encoded_hrm, \\r
+ // sizeof(encoded_hrm)/sizeof(encoded_hrm[0]), ATT_OP_NOTIFY);//heartrate \r
+ }\r
+ }\r
+\r
}\r
+\r
+ \r
#endif\r
report_hr_data(&ppg_mems_data_alg, ret, hr, hr_grader);\r
\r
}\r
errcode_t ret = 0;\r
\r
- if(g_ble_conn_id==0)\r
- return ERRCODE_BT_FAIL;\r
+ // if(g_ble_conn_id==0)\r
+ // {\r
+ // printf( "g_ble_conn_id==0\r\n");\r
+ // return ERRCODE_BT_FAIL;\r
+ // }\r
\r
ret = gatts_notify_indicate(g_ble_server_id, g_ble_conn_id, ¶m);\r
//printf("ble_ppgtest_server_send_input_report: 0x%x g_ble_conn_id:%d g_ppgtest_notify_report_att_hdl:%d\r\n",\r
cmd = "spo2";
enable = 0;
}
- else if (mail == PPG_SERVICE_CMD_TYPE_OPEN_HRS_BLE)
- {
-#ifdef PPG_HX3695
- hx3695_set_hrs_ble_swtich(1);
-#endif
- continue ;
- }
- else if (mail == PPG_SERVICE_CMD_TYPE_CLOSE_HRS_BLE)
- {
-#ifdef PPG_HX3695
- hx3695_set_hrs_ble_swtich(0);
-#endif
- continue ;
- }else if (mail == PPG_SERVICE_CMD_TYPE_INT_HANDLER){
+ else if (mail == PPG_SERVICE_CMD_TYPE_INT_HANDLER){
// #ifdef PPG_VC9202
// vc9202_usr_interrupt_handler(SPORT_TYPE_NORMAL,0);
// #elif defined PPG_VC921X
* @Author: penglei 1624952103@qq.com
* @Date: 2024-03-27 09:07:00
* @LastEditors: penglei 1624952103@qq.com
- * @LastEditTime: 2025-06-05 14:24:03
+ * @LastEditTime: 2025-07-14 13:58:55
* @FilePath: /FD230/code/sdk/drivers/peripheral/ppg/service/ppg_service.h
* @Description:
*
#define PPG_SERVICE_CMD_TYPE_STOP_WEAR_MODE_TEST 0x21
#define PPG_SERVICE_CMD_TYPE_DO_LED_OFF_MODE_TEST 0x22
#define PPG_SERVICE_CMD_TYPE_DO_SINGLE_CHECK_MODE_TEST 0x23
-#define PPG_SERVICE_CMD_TYPE_OPEN_HRS_BLE 0x24
-#define PPG_SERVICE_CMD_TYPE_CLOSE_HRS_BLE 0x25
-#define PPG_SERVICE_CMD_TYPE_FPC_TEST 0x27
-#define PPG_SERVICE_CMD_TYPE_FACTORY_TEST 0x28
+#define PPG_SERVICE_CMD_TYPE_FPC_TEST 0x24
+#define PPG_SERVICE_CMD_TYPE_FACTORY_TEST 0x25
errcode_t uapi_ppg_service_init(void);
void uapi_ppg_service_deinit(void);
uint8_t atuoota_status;//是否处于自动ota状态
uint8_t voice_status;//是否处于使用语音助手
uint8_t bp_status;//血压测量状态
+ uint8_t hrs_ble_status;//心率蓝牙广播
} runtime_status_t;
{
return g_runtime.bp_status;
}
+
+// 设置是否为心率蓝牙广播状态
+void uapi_dev_runtime_set_hrs_ble_status(uint8_t status)
+{
+ g_runtime.hrs_ble_status = status;
+}
+// 获取是否为心率蓝牙广播状态
+uint8_t uapi_dev_runtime_get_hrs_ble_status(void)
+{
+ return g_runtime.hrs_ble_status;
+}
bool uapi_get_gate_mixture_status(void);
+void uapi_dev_runtime_set_hrs_ble_status(uint8_t status);
+uint8_t uapi_dev_runtime_get_hrs_ble_status(void);
+
#ifdef __cplusplus
#if __cplusplus
}