FIX 1.解决高频dau未发送趋势和事件的最后一包应答;

main
wangbo 4 weeks ago
parent 10bddb1480
commit c35bdbd6bb

@ -236,10 +236,13 @@ int32_t _csg_pkt_check(char *pkt)
csg_pkt_head_t *head = (csg_pkt_head_t*)pkt; csg_pkt_head_t *head = (csg_pkt_head_t*)pkt;
/* 对主次设备号进行识别, 次设备号可以是广播. */ /* 对主次设备号进行识别, 次设备号可以是广播. */
if ((head->dev_type_m != device_info.type_m)) if (head->dev_id != device_info.dev_id
|| head->dev_type_m != device_info.type_m
|| head->dev_type_s != device_info.type_s)
{ {
DBG(DBG_M_PD_CSG_ERR, "@1 type_m=%d %d \r\n", head->dev_type_m, device_info.type_m); DBG(DBG_M_PD_CSG_ERR, "Device type not match:0x%x(0x%x) %d-%d(%d-%d)\r\n", device_info.dev_id, head->dev_id,
return E_ERROR; device_info.type_m, device_info.type_s, head->dev_type_m, head->dev_type_s);
//return E_ERROR;
} }
if (head->len > 1500) if (head->len > 1500)
@ -966,7 +969,7 @@ int32_t _csg_recv_process(char *pkt, uint32_t len)
{ {
if (_csg_slot_is_valid(pkt, &typem, &types) != E_NONE) if (_csg_slot_is_valid(pkt, &typem, &types) != E_NONE)
{ {
DBG(DBG_M_PD_CSG_ERR, "Invalid slot=%d\n", head->slot); DBG(DBG_M_PD_CSG_ERR, "Invalid slot=%d\r\n", head->slot);
return E_ERROR; return E_ERROR;
} }
} }

@ -677,6 +677,7 @@ void _hf_recv_trend(uint8_t slot, char *pkt, uint16_t len)
uint8_t port = 0; uint8_t port = 0;
hf_trend_ack_t ack; hf_trend_ack_t ack;
hf_trend_ack_t *ack_p = (hf_trend_ack_t*)(pkt + sizeof(dau_pkt_head_t)); hf_trend_ack_t *ack_p = (hf_trend_ack_t*)(pkt + sizeof(dau_pkt_head_t));
int last_pack_flag = 0;
/* 不处理补包数据 */ /* 不处理补包数据 */
if (!head_trend->boosterpack) if (!head_trend->boosterpack)
@ -704,12 +705,13 @@ void _hf_recv_trend(uint8_t slot, char *pkt, uint16_t len)
} }
//*temp = 0x5a5a; //*temp = 0x5a5a;
*temp = port; *temp = port;
last_pack_flag = 1;
/* 发送给后台, 内存由后台释放 */ /* 发送给后台, 内存由后台释放 */
if (dau_msg_send(DAU_SEND_TREND, slot, temp) != E_NONE) //if (dau_msg_send(DAU_SEND_TREND, slot, temp) != E_NONE)
{ //{
return; // return;
} //}
} }
} }
else if (HF_TREND_TYPE_PRPD == head_trend->type) else if (HF_TREND_TYPE_PRPD == head_trend->type)
@ -744,6 +746,15 @@ void _hf_recv_trend(uint8_t slot, char *pkt, uint16_t len)
memcpy(ack_p, &ack, sizeof(hf_trend_ack_t)); memcpy(ack_p, &ack, sizeof(hf_trend_ack_t));
dau_data_send(dau, &head_data); dau_data_send(dau, &head_data);
if (last_pack_flag)
{
/* 发送给后台, 内存由后台释放 */
if (dau_msg_send(DAU_SEND_TREND, slot, temp) != E_NONE)
{
return;
}
}
return; return;
} }
@ -805,6 +816,7 @@ void _hf_recv_event(uint8_t slot, char *pkt, uint16_t len)
char *point = NULL; char *point = NULL;
hf_event_ack_t ack; hf_event_ack_t ack;
hf_event_ack_t *ack_p = (hf_event_ack_t*)(pkt + sizeof(dau_pkt_head_t)); hf_event_ack_t *ack_p = (hf_event_ack_t*)(pkt + sizeof(dau_pkt_head_t));
int last_pack_flag = 0;
/* 不处理补包数据 */ /* 不处理补包数据 */
if (!head_event->boosterpack) if (!head_event->boosterpack)
@ -846,12 +858,13 @@ void _hf_recv_event(uint8_t slot, char *pkt, uint16_t len)
} }
memcpy(event_send, event, sizeof(hf_event_t)); memcpy(event_send, event, sizeof(hf_event_t));
last_pack_flag = 1;
/* 发送给后台, 内存由后台释放 */ /* 发送给后台, 内存由后台释放 */
if (dau_msg_send(DAU_SEND_EVENT, slot, event_send) != E_NONE) //if (dau_msg_send(DAU_SEND_EVENT, slot, event_send) != E_NONE)
{ //{
return; // return;
} //}
} }
} }
@ -867,6 +880,15 @@ void _hf_recv_event(uint8_t slot, char *pkt, uint16_t len)
memcpy(ack_p, &ack, sizeof(hf_event_ack_t)); memcpy(ack_p, &ack, sizeof(hf_event_ack_t));
dau_data_send(dau, &head_data); dau_data_send(dau, &head_data);
if (last_pack_flag)
{
/* 发送给后台, 内存由后台释放 */
if (dau_msg_send(DAU_SEND_EVENT, slot, event_send) != E_NONE)
{
return;
}
}
return; return;
} }

@ -220,13 +220,13 @@ void *_modbus_send_handle()
pcard = &modbus.card[slot]; pcard = &modbus.card[slot];
dau = &daus[slot]; dau = &daus[slot];
//DBG(DBG_M_PD_MODBUS, "slot%d unit_id:%d status:%d\n", slot, pcard->unit_id, pcard->status); DBG(DBG_M_PD_MODBUS, "slot%d unit_id:%d status:%d\n", slot, pcard->unit_id, pcard->status);
if (pcard->status) if (pcard->status)
{ {
sleep(1); sleep(1);
if (_modbus_get_device_type(pcard->unit_id, &dau->info.type_m, &dau->info.type_s) != E_NONE) if (_modbus_get_device_type(pcard->unit_id, &dau->info.type_m, &dau->info.type_s) != E_NONE)
continue; continue;
//DBG(DBG_M_PD_MODBUS, "slot%d typem:%d types:%d\n", slot, dau->info.type_m, dau->info.type_s); DBG(DBG_M_PD_MODBUS, "slot%d typem:%d types:%d\n", slot, dau->info.type_m, dau->info.type_s);
if (DEVICE_IR_TYPE == dau->info.type_s && DEVICE_M_TYPE == dau->info.type_m) if (DEVICE_IR_TYPE == dau->info.type_s && DEVICE_M_TYPE == dau->info.type_m)
{ {

Loading…
Cancel
Save