解决了socket_id地址未对齐引起的硬件故障问题,将uint8_t类型值改为int
This commit is contained in:
parent
28aded7bdf
commit
e5d7708387
|
@ -2,7 +2,7 @@
|
|||
* @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:
|
||||
* @
|
||||
|
@ -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;
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue