diff --git a/bsp/inc/bsp_h308.h b/bsp/inc/bsp_h308.h index 8917cd4..2a54906 100644 --- a/bsp/inc/bsp_h308.h +++ b/bsp/inc/bsp_h308.h @@ -1,12 +1,12 @@ -/*** +/*** * @Author: mbw * @Date: 2025-01-24 08:40:39 * @LastEditors: mbw && 1600520629@qq.com - * @LastEditTime: 2025-01-25 14:49:06 + * @LastEditTime: 2025-01-25 17:18:45 * @FilePath: \JT-DT-YD4N02A_RTT_MRS-NT26K\bsp\inc\bsp_h308.h - * @Description: + * @Description: * @ - * @Copyright (c) 2025 by ${git_name_email}, All Rights Reserved. + * @Copyright (c) 2025 by ${git_name_email}, All Rights Reserved. */ #ifndef __BSP_H308_H__ #define __BSP_H308_H__ @@ -76,16 +76,16 @@ typedef struct __attribute__((packed)) rt_uint8_t checksum; // 校验 } TsH308Data; -typedef struct +typedef struct __attribute__((packed)) { uint8_t end_of_life; // 寿命到期 uint8_t last_life; // 上次状态 uint8_t to_be_calib; // 待标定 uint8_t alarm_value; // 报警器阈值 LEL uint8_t detection_flag; // 实时检测的标志 + uint8_t fault_code; // 故障码 uint32_t expiration_seconds; // 传感器到期时间,s TeH308Status status_buffer[H308_SAMPLING_TIMS]; // 采样缓存数组 - TeH308FaultCode fault_code; // 故障码 TsH308Data Data; } TsH308; diff --git a/bsp/src/at_device_nt26k.c b/bsp/src/at_device_nt26k.c index d0cba69..12c0269 100644 --- a/bsp/src/at_device_nt26k.c +++ b/bsp/src/at_device_nt26k.c @@ -2,7 +2,7 @@ * @Author : stark1898y 1658608470@qq.com * @Date : 2024-09-04 13:33:49 * @LastEditors: mbw && 1600520629@qq.com - * @LastEditTime: 2025-01-25 13:38:31 + * @LastEditTime: 2025-02-06 08:55:35 * @FilePath: \JT-DT-YD4N02A_RTT_MRS-NT26K\bsp\src\at_device_nt26k.c * @Description : * @@ -47,9 +47,11 @@ char data_buf[AT_CLIENT_RECV_BUFF_LEN] = {0}; nt26k_sys_info nt26k = {0}; + struct rt_completion nt26k_init_complate; -volatile rt_uint8_t socket_id = 0; +volatile int socket_id = 0; volatile rt_uint8_t ntp_flag = 0; + // 将本地时间转换为对应时区时间 void Time_Zone_Conversion(TsRtcDateTime *timeInfo) { @@ -361,32 +363,24 @@ int at_send_data(struct at_device *device, const char *data, rt_size_t size) { #define NT26K_SEND_RESP_TIME (3000) const char *line_buffer = RT_NULL; - rt_uint8_t retry = 0; at_response_t resp = at_create_resp(AT_CLIENT_RECV_BUFF_LEN, 2, NT26K_SEND_RESP_TIME); - rt_uint8_t max_retry_count = (rt_uint8_t)Flash_Get_SysCfg(kIotRetryId); if (resp == RT_NULL) { LOG_E("no memory for nt26k device(%s) response structure.", device->name); at_delete_resp(resp); return -RT_ERROR; } - - while (retry < max_retry_count) + if (at_obj_exec_cmd(device->client, resp, TCP_SEND_DATA, socket_id, data) == RT_EOK) { - if (at_obj_exec_cmd(device->client, resp, TCP_SEND_DATA, socket_id, data) == RT_EOK) + if ((line_buffer = at_resp_get_line(resp, 2)) != RT_NULL) { - if ((line_buffer = at_resp_get_line(resp, 2)) != RT_NULL) + if (rt_strstr(line_buffer, "SEND OK") != RT_NULL) { - if (rt_strstr(line_buffer, "SEND OK") != RT_NULL) - { - LOG_D("send data success, socket_id: %d", socket_id); - at_delete_resp(resp); - return RT_EOK; - } + LOG_D("send data success, socket_id: %d", socket_id); + at_delete_resp(resp); + return RT_EOK; } } - retry++; - rt_thread_mdelay(1000); } at_delete_resp(resp); @@ -1411,8 +1405,9 @@ int Time_Calibration(struct at_device *device) rtc_dt.hour, rtc_dt.minute, rtc_dt.second); // 设置时间 LOG_I("RTC时间: %04d-%02d-%02d %02d:%02d:%02d \n", rtc_dt.year, rtc_dt.month, rtc_dt.day, rtc_dt.hour, rtc_dt.minute, rtc_dt.second); - at_delete_resp(resp); ntp_flag = 1; + at_delete_resp(resp); + return RT_EOK; } else diff --git a/bsp/src/bsp_h308.c b/bsp/src/bsp_h308.c index 9075175..95a201d 100644 --- a/bsp/src/bsp_h308.c +++ b/bsp/src/bsp_h308.c @@ -2,7 +2,7 @@ * @Author: mbw * @Date: 2024-11-14 10:21:04 * @LastEditors: mbw && 1600520629@qq.com - * @LastEditTime: 2025-01-25 15:07:34 + * @LastEditTime: 2025-01-25 17:15:31 * @FilePath: \JT-DT-YD4N02A_RTT_MRS-NT26K\bsp\src\bsp_h308.c * @Description: * @@ -93,48 +93,46 @@ MSH_CMD_EXPORT(Sensor_ShowData, Sensor_ShowData); uint8_t H308_GetFrameData(const char *p_src, const rt_uint8_t src_len, TsH308Data *pData) { + // A+000.00 +31.1 0657.80 +18.1 B+008.0 00 12 + + rt_uint8_t xor = 0; + uint8_t ret = 0; + char *p_str = strstr(p_src, "A+"); // 查找子字符串的位置 + uint32_t offset = p_str - p_src; // 计算偏移量 + TsH308StrData _H308StrData = {0}; - rt_uint8_t xor = 0; - uint8_t ret = RT_ERROR; - char *p_str = rt_strstr(p_src, "A+"); // 查找子字符串的位置 - - if (p_str != NULL && strlen(p_str) >= src_len) + if ((p_str != NULL) && (offset <= src_len - 44)) { - if (sscanf(p_str, "A+%6s %6s %8s %6s B+%6s %2s %2s\r\n", - _H308StrData.vol, _H308StrData.temp, _H308StrData.laser_temp, - _H308StrData.signal_strength, _H308StrData.gain, - _H308StrData.fault_code, _H308StrData.checksum) == 7) + if (sscanf(p_str, "A+%6s %6s %8s %6s B+%6s %2s %2s", + _H308StrData.vol, _H308StrData.temp, _H308StrData.laser_temp, _H308StrData.signal_strength, + _H308StrData.gain, _H308StrData.fault_code, _H308StrData.checksum) == 7) { pData->checksum = (rt_uint8_t)strtol(_H308StrData.checksum, NULL, 16); xor = H308_XorChecksum(p_str, 44); // 对数据进行异或校验 - if (xor == pData->checksum) + if (xor== pData->checksum) { - pData->lel = atof(_H308StrData.vol) * 20; - pData->temp = atof(_H308StrData.temp); - pData->laser_temp = atof(_H308StrData.laser_temp); - pData->signal_strength = atof(_H308StrData.signal_strength); - pData->gain = atof(_H308StrData.gain); + pData->lel = (float)(atof(_H308StrData.vol) * 20); + pData->temp = (float)atof(_H308StrData.temp); + pData->laser_temp = (float)atof(_H308StrData.laser_temp); + pData->signal_strength = (float)atof(_H308StrData.signal_strength); + pData->gain = (float)atof(_H308StrData.gain); pData->fault_code = (rt_uint8_t)strtol(_H308StrData.fault_code, NULL, 16); - ret = RT_EOK; + pData->checksum = (rt_uint8_t)strtol(_H308StrData.checksum, NULL, 16); + ret = 0; } else { - LOG_E("XOR check failed: expected %02X, got %02X", pData->checksum, xor); + LOG_E("xor failed"); ret = RT_ERROR; } } else { - LOG_E("sscanf failed"); ret = RT_ERROR; + LOG_E("H308_ExtractData failed"); } } - else - { - LOG_E("Invalid data frame or length"); - ret = RT_ERROR; - } return ret; } @@ -340,7 +338,7 @@ static void h308_thread_entry(void *param) { uint8_t len = lwrb_get_full(&uart4_rx_rb); lwrb_read(&uart4_rx_rb, str, len); - + rt_memset(&str[len - 2], 0, 2); if (len >= 44) { ret = H308_GetFrameData((const char *)str, len, &H308.Data); diff --git a/bsp/src/bsp_nt26k.c b/bsp/src/bsp_nt26k.c index 41fc788..abf6a13 100644 --- a/bsp/src/bsp_nt26k.c +++ b/bsp/src/bsp_nt26k.c @@ -2,7 +2,7 @@ * @Author: mbw * @Date: 2024-10-09 08:42:14 * @LastEditors: mbw && 1600520629@qq.com - * @LastEditTime: 2025-01-25 09:42:09 + * @LastEditTime: 2025-02-06 08:41:05 * @FilePath: \JT-DT-YD4N02A_RTT_MRS-NT26K\bsp\src\bsp_nt26k.c * @Description: * @@ -794,18 +794,17 @@ int Nt26k_Process_Events(Nt26kEvent nt26k_recv_event, struct at_device *device, if (event) // 处理该事件 { - // 打印事件的名称 - LOG_D("%s上报\n", event->event_name); + LOG_D("%s上报\n", event->event_name);// 打印事件的名称 + for (size_t i = 0; i < max_retry_count; i++) { if (nt26k_conncet_tcp_flag) { - if (event->send_func) + if (event->send_func)// 如果事件有关联的发送函数,则调用该发送函数 { #ifdef TEST_ENABLE RTC_ShowTime(); // 每次发送打印下时间,容易定位问题 #endif - // 如果事件有关联的发送函数,则调用该发送函数 rt_thread_mdelay(IMEI_Delay()); int result = event->send_func(device, nt26k_ops); if (result != RT_EOK)