* @Author: penglei 1624952103@qq.com\r
* @Date: 2025-01-16 12:35:15\r
* @LastEditors: penglei 1624952103@qq.com\r
- * @LastEditTime: 2025-07-01 15:17:47\r
+ * @LastEditTime: 2025-07-03 09:43:02\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
static int data_cnt = 0;\r
\r
static uint8_t *bn02_data = NULL;\r
-// static int data[16 * 5 * 60] = {0};\r
-\r
-// int data = ((rxByte[i] & 0xff) << 16)\r
-// + ((rxByte[i + 1] & 0xff) << 8)\r
-// + (rxByte[i + 2] & 0xff);\r
-// if (data >= DATA_HANDLE / 2) {\r
-// data -= DATA_HANDLE;\r
-// }\r
-// 其中:DATA_HANDLE = 2^24\r
-\r
-\r
\r
bool Bn02_write_reg(uint8_t data)\r
{\r
- uint8_t cnt = pm_veto_get_id_cnt(PM_ID_BP);\r
- if (cnt == 0) \r
- {\r
- uapi_pm_add_sleep_veto(PM_ID_BP);\r
- }\r
+ // uint8_t cnt = pm_veto_get_id_cnt(PM_ID_BP);\r
+ // if (cnt == 0) \r
+ // {\r
+ // uapi_pm_add_sleep_veto(PM_ID_BP);\r
+ // }\r
\r
i2c_data_t i2c_data;\r
i2c_data.send_buf = &data;\r
if (ret != ERRCODE_SUCC)\r
printf("i2c Write data write fail! ret=0x%x\n", ret);\r
\r
- cnt = pm_veto_get_id_cnt(PM_ID_BP);\r
- if (cnt == 1) \r
- {\r
- uapi_pm_remove_sleep_veto(PM_ID_BP);\r
- }\r
+\r
+ // cnt = pm_veto_get_id_cnt(PM_ID_BP);\r
+ // if (cnt == 1) \r
+ // {\r
+ // uapi_pm_remove_sleep_veto(PM_ID_BP);\r
+ // }\r
\r
return 1;\r
}\r
bool Bn02_reads(uint8_t *data,int len)\r
{\r
\r
- uint8_t cnt = pm_veto_get_id_cnt(PM_ID_BP);\r
- if (cnt == 0) \r
- {\r
- uapi_pm_add_sleep_veto(PM_ID_BP);\r
- }\r
+ // uint8_t cnt = pm_veto_get_id_cnt(PM_ID_BP);\r
+ // if (cnt == 0) \r
+ // {\r
+ // uapi_pm_add_sleep_veto(PM_ID_BP);\r
+ // }\r
\r
i2c_data_t i2c_data;\r
i2c_data.send_buf = NULL;\r
if (ret != ERRCODE_SUCC) \r
printf("i2c read data fail! ret=0x%x\n", ret);\r
\r
- cnt = pm_veto_get_id_cnt(PM_ID_BP);\r
- if (cnt == 1) \r
- {\r
- uapi_pm_remove_sleep_veto(PM_ID_BP);\r
- }\r
+ // cnt = pm_veto_get_id_cnt(PM_ID_BP);\r
+ // if (cnt == 1) \r
+ // {\r
+ // uapi_pm_remove_sleep_veto(PM_ID_BP);\r
+ // }\r
\r
return 1;\r
}\r
data_cnt = 0;\r
memset(bn02_data,0,MAX_CNT);\r
}\r
-\r
}\r
else\r
{\r
// {\r
// printf("222data[%d]:%d\n",i,tcp_data[i]);\r
// }\r
-\r
data_cnt += 48;\r
}\r
}\r
if(bn02_get_ble_status())\r
bn02_replymsg(bn02_buf,48,1);\r
\r
- // if(fp)\r
- // {\r
- // if(data_cnt >= 16 * 5 * 60)\r
- // {\r
-\r
- // }\r
- // else\r
- // {\r
- // data_cnt += cnt;\r
- // if(fwrite(bn02_buf,sizeof(int),cnt,fp) != cnt)\r
- // printf("bn02 fwrite failed\n");\r
- // else\r
- // printf("bn02 fwrite succed data_cnt:%d\n",cnt);\r
- // }\r
-\r
- // }\r
-\r
-\r
- // printf("data_cnt:%d\n",data_cnt);\r
-\r
- // if(data_cnt >= 16 * 5 * 60 && fp)\r
- // {\r
- // int *data_array = (int *)malloc(data_cnt * sizeof(int));\r
-\r
- // if (!data_array) \r
- // {\r
- // printf("内存分配失败\n");\r
- // }\r
- // else \r
- // {\r
- // int read_count = 0;\r
-\r
- // fseek(fp, 0, SEEK_SET);\r
-\r
- // while (read_count < data_cnt && fread(&data_array[read_count], sizeof(int), 1, fp) == 1)\r
- // {\r
- // printf("%d ", data_array[read_count]);\r
- // read_count++;\r
- \r
- // if (read_count % 10 == 0)\r
- // printf("\n");\r
- // }\r
- \r
- // printf("\n实际读取数据: %d 个\n", read_count);\r
- \r
- // if (feof(fp))\r
- // printf("已读取所有数据\n");\r
- // else if (ferror(fp)) \r
- // {\r
- // printf("读取数据时发生错误\n");\r
- // free(data_array);\r
- // data_array = NULL;\r
- // }\r
-\r
-\r
- // free(data_array);\r
- // data_array = NULL;\r
- \r
- // // 清空文件内容(将文件指针移到文件开头并截断文件)\r
- // fclose(fp); // 关闭文件\r
- // if(remove(BN02_FILE) != 0)\r
- // printf("remove %s failed\n",BN02_FILE);\r
- // else\r
- // printf("remove %s succed\n",BN02_FILE);\r
-\r
- // bn02_stop();\r
- // } \r
- // } \r
- \r
}\r
\r
void bn02_start(void)\r
Bn02_write_reg(BN02_STOP_CMD);\r
Bn02_Power_Ctrl(0);\r
\r
+ // uint8_t cnt = pm_veto_get_id_cnt(PM_ID_BP);\r
+ // if (cnt == 1) \r
+ // {\r
+ // uapi_pm_remove_sleep_veto(PM_ID_BP);\r
+ // }\r
+\r
// do_bp_tcp_server_send_data(BP_TCP_SERVICE_CMD_SERVER_DEINIT,NULL,0);\r
\r
#if 0\r
static int g_listen_sock = -1;
static uint8_t LK_STATUS = 0;
+static uint8_t BP_GET_STATUS = 0;
static int bp_sbp = 0;
static int bp_dbp = 0;
static char *imei = NULL;
+static uint8_t bp_measure_type = 0;
+
//激活码 zzzm3K72zxRRLPX2utu5vMZcM269/8/7ZGOHVvONFt7WPAlQT++RJjzzrHj5v5DdlnmeELWI1FUPVJb96/5mOA==
#define BP_ACTIVE_CODE_FILE "/user/system/bp_active_code.bin"
ip_addr_t ip;
};
+void bp_set_adjust_data(int sbp,int dbp)
+{
+ bp_sbp = sbp;
+ bp_dbp = dbp;
+}
+
+void bp_set_measure_type(uint8_t type)
+{
+ bp_measure_type = type;
+}
+
void bp_get_data(int *sbp,int *dbp)
{
if(sbp == NULL || dbp == NULL)
return;
}
- // 初始化缓冲区
memset(buffer, 0, len);
- // 安全读取文件内容(最多len-1字节,留一个位置给\0)
size_t bytes_read = fread(buffer, 1, len - 1, file);
if (bytes_read > 0)
{
void tcp_recv_data_handler(const char *input, int input_len)
{
- // 检查输入基本格式
if (input_len < 2 || input[0] != '[' || input[input_len-1] != ']')
{
printf("解析失败: 格式错误(缺少方括号)\n");
return;
}
- // 移除首尾方括号
const char *data = input + 1;
size_t data_len = input_len - 2;
- // 查找逗号分隔符
const char *comma1 = memchr(data, ',', data_len);
const char *comma2 = comma1 ? memchr(comma1 + 1, ',', data_len - (comma1 - data + 1)) : NULL;
-
- // 解析头部字段(BID*IMEI*长度*指令)
+
const char *star1 = memchr(data, '*', data_len);
const char *star2 = star1 ? memchr(star1 + 1, '*', data_len - (star1 - data + 1)) : NULL;
const char *star3 = star2 ? memchr(star2 + 1, '*', data_len - (star2 - data + 1)) : NULL;
return;
}
- // 提取头部各字段
const char *bid = data;
const char *imei = star1 + 1;
const char *len_str = star2 + 1;
return;
}
- // 解析内容长度(16进制转10进制)
uint32_t content_len = 0;
sscanf(len_str, "%x", &content_len);
printf("解析后的内容长度: %u\n", content_len);
-
- // 处理不同格式情况
+
if (comma1 && comma2)
{
- // 有两个逗号,完整格式
size_t status_len = comma2 - (comma1 + 1);
size_t base64_len = data_len - (comma2 - data + 1);
printf("状态码: %.*s\n", (int)status_len, comma1 + 1);
- // 验证状态码
if (strncmp(comma1 + 1, "200", status_len) != 0)
{
printf("解析失败: 状态码必须为200,实际: %.*s\n", (int)status_len, comma1 + 1);
return;
}
-
- // Base64解码
+
size_t decoded_len = (base64_len * 3) / 4 + 1;
unsigned char *decoded_data = malloc(decoded_len);
if (!decoded_data)
return;
}
decoded_data[actual_decoded_len] = '\0';
-
- // 解析JSON数据
+
cJSON *json_data = cJSON_Parse((const char *)decoded_data);
free(decoded_data);
printf("解析失败: JSON解析失败,原始数据: %s\n", decoded_data);
return;
}
-
- // 打印JSON数据
+
printf("JSON数据: %s\n", cJSON_Print(json_data));
- // 提取关键JSON字段
cJSON *status = cJSON_GetObjectItem(json_data, "status");
cJSON *data_obj = cJSON_GetObjectItem(json_data, "data");
cJSON *activation_code = cJSON_GetObjectItem(data_obj, "activation_code");
printf("dbp: %d\n", dbp->valueint);
bp_dbp = dbp->valueint;
- if (g_listen_sock >= 0)
- {
- lwip_close(g_listen_sock);
- g_listen_sock = -1;
- LK_STATUS = 0;
- }
+ BP_GET_STATUS = 1;
}
}
}
if(listen_socket < 0)
+ {
+ printf("listen_socket < 0 \n");
return -1;
+ }
int ret = 0;
if(imei == NULL)
{
uint8_t retry = 0;
- while((imei == NULL || strlen(imei) == 0) && retry < 10)
+ while((imei == NULL || strlen(imei) == 0) && retry < 5)
{
retry++;
- LOS_Msleep(2000);
+ LOS_Msleep(1000);
imei = uapi_dev_runtime_get_cat1_imei();
}
// 发送数据
tcp_send(g_listen_sock, send_str, send_len);
-
+ LOS_Msleep(1000);
FAILED:
// 释放资源
if(head_str != NULL)
return base64_length;
}
-void upload_bp_data(int *data, int cnt)
+static void upload_bp_data(int *data, int cnt)
{
#if 0
if (data == NULL || cnt == 0 || LK_STATUS == 0)
if (data == NULL || cnt == 0)
return;
- uint8_t pm_cnt = pm_veto_get_id_cnt(PM_ID_CAT1);
- if (pm_cnt == 0) {
- uapi_pm_add_sleep_veto(PM_ID_CAT1);
- }
-
int ret = -1;
char *data_str = NULL;
int data_len = 0;
char *header_json = NULL;
int encode_header_len = 0;
- if(imei == NULL)
- {
- uint8_t retry = 0;
- while((imei == NULL || strlen(imei) == 0) && retry < 10)
- {
- retry++;
- LOS_Msleep(2000);
- imei = uapi_dev_runtime_get_cat1_imei();
- }
-
- if (imei == NULL || strlen(imei) == 0)
- {
- printf("IMEI get failed\n");
- ret = -1;
- goto FAILED;
- }
- }
-
-
- printf("imei:%s\n", imei);
// 获取测量时间
bp_get_measure_time(&begin_time, &end_time);
// temp_len += snprintf(json_data + temp_len, json_len - temp_len, "\"device_code\":\"%s\",", "864430010001091");
temp_len += snprintf(json_data + temp_len, json_len - temp_len, "\"device_code\":\"%s\",", imei);
temp_len += snprintf(json_data + temp_len, json_len - temp_len, "\"measure_mode\":\"%d\",", 1);
- temp_len += snprintf(json_data + temp_len, json_len - temp_len, "\"measure_type\":\"%d\",", 7);
+ temp_len += snprintf(json_data + temp_len, json_len - temp_len, "\"measure_type\":\"%d\",", bp_measure_type);
temp_len += snprintf(json_data + temp_len, json_len - temp_len, "\"begin_time\":\"%s\",", begin_time_str);
temp_len += snprintf(json_data + temp_len, json_len - temp_len, "\"end_time\":\"%s\",", end_time_str);
temp_len += snprintf(json_data + temp_len, json_len - temp_len, "\"ppg_data\":[");
+ // printf("bp_measure_type : %d\n",bp_measure_type);
+
for(int i = 0; i < cnt; i++)
{
if(i == (cnt - 1))
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(temp_len > json_len)
goto FAILED;
- // 后续Base64编码和数据发送逻辑...
encode_len = temp_len * 3 / 2;
// printf("encode_len : %d\n", encode_len);
encode_str = (char *)malloc(encode_len);
goto FAILED;
}
+ while(BP_GET_STATUS != 1)
+ {
+ LOS_Msleep(5000);
+ ret = tcp_send(g_listen_sock, send_str, send_len);
+ if(ret != 0)
+ {
+ printf("tcp_send failed\n");
+ goto FAILED;
+ }
+ }
+
// int offset = 0;
// while (offset < send_len)
// offset += chunk_len;
// }
- LOS_Msleep(3000);
-
FAILED:
if (encode_header_str != NULL)
encode_str = NULL;
}
- pm_cnt = pm_veto_get_id_cnt(PM_ID_CAT1);
- if (pm_cnt == 1) {
- uapi_pm_remove_sleep_veto(PM_ID_CAT1);
- }
-
// printf("free\n");
#endif
}
char len_str[5] = {0};
char md5_str[33] = {0};
// char json_data[1024] = {0};
-
- if(imei == NULL)
- {
- uint8_t retry = 0;
- while((imei == NULL || strlen(imei) == 0) && retry < 10)
- {
- retry++;
- LOS_Msleep(2000);
- imei = uapi_dev_runtime_get_cat1_imei();
- }
-
- if (imei == NULL || strlen(imei) == 0)
- {
- printf("IMEI get failed\n");
- ret = -1;
- goto FAILED;
- }
- }
-
- printf("imei:%s\n", imei);
char *json_data = (char *)malloc(512);
if(json_data == NULL)
// 发送数据
tcp_send(g_listen_sock, send_str, send_len);
-
+ LOS_Msleep(2000);
ret = 0; // 成功
FAILED:
// 发送数据
tcp_send(g_listen_sock, send_str, send_len);
-
+ LOS_Msleep(2000);
ret = 0; // 成功
FAILED:
tcp_data = NULL;
tcp_data_cnt = 0;
}
- // if (g_listen_sock >= 0)
- // {
- // lwip_close(g_listen_sock);
- // g_listen_sock = -1;
- // }
+ if (g_listen_sock >= 0)
+ {
+ lwip_close(g_listen_sock);
+ g_listen_sock = -1;
+ }
+ BP_GET_STATUS = 0;
}
void do_bp_tcp_server_send_data(int cmd,int *data,uint32_t len)
void bp_tcp_init(void)
{
- // printf("bp_tcp_init \n");
-
- uint8_t retry = 0;
-
- uint8_t pm_cnt = pm_veto_get_id_cnt(PM_ID_CAT1);
- if (pm_cnt == 0) {
- uapi_pm_add_sleep_veto(PM_ID_CAT1);
- }
-
- while (LK_STATUS == 0 && retry < 5)
- {
- retry++;
- LOS_Msleep(2000);
- tcp_sign_up();
- }
+ tcp_sign_up();
+
if(LK_STATUS == 0 )
{
printf("LK failed\n");
- goto FAILED;
+ return;
}
- // printf("retry : %d\n");
- retry = 0;
char token[64] = {0};
bp_get_token(token, 64);
- while(strlen(token) == 0 && retry < 5)
+
+ if(strlen(token) == 0)
{
- printf("bp_get_token:%s\n", token);
- retry++;
bp_tcp_login();
LOS_Msleep(2000);
bp_get_token(token, 64);
if (strlen(token) == 0)
{
printf("token get failed\n");
- goto FAILED;
- }
- else
- printf("token get succed\n");
-
-FAILED:
- pm_cnt = pm_veto_get_id_cnt(PM_ID_CAT1);
- if (pm_cnt == 1) {
- uapi_pm_remove_sleep_veto(PM_ID_CAT1);
+ return;
}
}
// }
// memset((void*)tcp_data,0,MAX_CNT * sizeof(int));
LOS_Msleep(1000);
- upload_bp_data(tcp_data,tcp_data_cnt);
- tcp_data_cnt = 0;
+
+ if(LK_STATUS == 1)
+ upload_bp_data(tcp_data,tcp_data_cnt);
+ else
+ printf("NOT LK\n");
+
+ LOS_Msleep(2000);
bp_tcp_data_clean();
}
else
void bp_tcp_server_recv_task(void *pvParameters)
{
- char rx_buffer[512] = {0};
+ char *rx_buffer = (char *)malloc(2048);
+ if(rx_buffer == NULL)
+ {
+ printf("rx_buffer malloc failed\n");
+ return;
+ }
uint8_t retry = 0;
while (1)
{
continue;
}
else
- do_bp_tcp_server_send_data(BP_TCP_SERVICE_CMD_SERVER_INIT,NULL,0);
+ bp_tcp_init();
}
// if (tcp_socket_init() != 0)
// printf("tcp_sign_up\n");
// 接收数据
- memset(rx_buffer, 0, sizeof(rx_buffer));
- int len = recv(g_listen_sock, rx_buffer, sizeof(rx_buffer) - 1, 0);
+ memset(rx_buffer, 0, 2048);
+ int len = recv(g_listen_sock, rx_buffer, 2048 - 1, 0);
if (len > 0)
{
rx_buffer[len] = '\0';
- printf("recv len : %d\n",len);
- PRINT("Received %d bytes: %s\n", len, rx_buffer);
+ printf("Received %d bytes: %s\n", len, rx_buffer);
tcp_recv_data_handler(rx_buffer,len);
// 解析数据