diff --git a/app/include/pd_dau.h b/app/include/pd_dau.h index 2f88baf..00a86bd 100755 --- a/app/include/pd_dau.h +++ b/app/include/pd_dau.h @@ -214,7 +214,8 @@ extern dau_t daus[PD_SLOTS_MAX]; /* Extern functions ----------------------------------------------------------*/ extern int32_t dau_handle_init(void); extern int32_t dau_handle_init_after(void); -extern void dau_send_data(dau_t *dau, dau_head_init_t *head_data); +extern void dau_data_send(dau_t *dau, dau_head_init_t *head_data); +extern int32_t dau_msg_send_cmd(uint32_t type, void *data); #endif #endif /************************ (C) COPYRIGHT LandPower ***** END OF FILE ****/ diff --git a/app/include/pd_hf.h b/app/include/pd_hf.h index 2c4528d..029c4b4 100755 --- a/app/include/pd_hf.h +++ b/app/include/pd_hf.h @@ -28,7 +28,8 @@ typedef struct typedef struct { uint8_t result; // 应答结果. 0:失败 1:成功 - uint8_t reserved[3]; // 保留 + uint8_t slot; // slot id + uint8_t reserved[2]; // 保留 } hf_ack_t; typedef struct diff --git a/app/lib/a_process/pd_dau.c b/app/lib/a_process/pd_dau.c index 88d573b..ac343df 100755 --- a/app/lib/a_process/pd_dau.c +++ b/app/lib/a_process/pd_dau.c @@ -39,7 +39,6 @@ dau_t daus[PD_SLOTS_MAX]; /* Private function prototypes -----------------------------------------------*/ /* Internal functions --------------------------------------------------------*/ - /* 包头填充 */ void _dau_head_init(dau_t *dau, dau_head_init_t *head_data) { @@ -125,7 +124,7 @@ void _dau_recv_connect(dau_t *dau, uint16_t recv_len) head_data.pkt_id = head->pkt_id; head_data.pkt = dau->buf_recv; head_data.len = sizeof(dau_pkt_head_t) + sizeof(dau_ack_t); - dau_send_data(dau, &head_data); + dau_data_send(dau, &head_data); return; } @@ -274,7 +273,7 @@ int32_t dau_handle_init_after(void) } /* 数据发送 */ -void dau_send_data(dau_t *dau, dau_head_init_t *head_data) +void dau_data_send(dau_t *dau, dau_head_init_t *head_data) { int32_t rv = 0; @@ -288,4 +287,23 @@ void dau_send_data(dau_t *dau, dau_head_init_t *head_data) } } +/* 发送数据到后台通讯进程. */ +int32_t dau_msg_send_cmd(uint32_t type, void *data) +{ + dau_send_msg_t msg; + + /* 封装消息. */ + msg.type = type; + msg.data = data; + + /* 发送消息 */ + if (fifo_write(csg.fifo_cmd_id, (void*)(&msg), sizeof(dau_send_msg_t)) != sizeof(dau_send_msg_t)) + { + DBG(DBG_M_PD_DAU_ERR, "DAU write ERROR! type=%d\r\n", type); + return E_ERROR; + } + + return E_NONE; +} + #endif diff --git a/app/lib/a_process/pd_hf.c b/app/lib/a_process/pd_hf.c index 18c7458..9d7f54b 100755 --- a/app/lib/a_process/pd_hf.c +++ b/app/lib/a_process/pd_hf.c @@ -124,7 +124,7 @@ void _hf_prps_get_send(uint8_t slot, void *data) memcpy(param, data, sizeof(hf_prps_get_t)); - dau_send_data(dau, &head_data); + dau_data_send(dau, &head_data); return; } @@ -148,7 +148,7 @@ void _hf_heartbeat_recv(uint8_t slot, char *pkt, uint16_t len) head_data.pkt = pkt; head_data.len = sizeof(dau_pkt_head_t) + 4; *timestamp = time(NULL); - dau_send_data(dau, &head_data); + dau_data_send(dau, &head_data); return; } @@ -156,6 +156,27 @@ void _hf_heartbeat_recv(uint8_t slot, char *pkt, uint16_t len) /* 心跳报文接收 */ void _hf_prps_get_recv(uint8_t slot, char *pkt, uint16_t len) { + hf_ack_t *ack = (hf_ack_t*)(pkt + sizeof(dau_pkt_head_t)); + hf_ack_t *data = NULL; + + /* 申请内存 */ + data = XMALLOC(MTYPE_CSG, sizeof(hf_ack_t)); + if (!data) + { + DBG(DBG_M_PD_HF_ERR, "XMALLOC ERROR!\r\n"); + return; + } + + /* 装填数据 */ + data->result = ack->result; + data->slot = slot; + + /* 发送给后台 */ + if (dau_msg_send_cmd(DAU_SEND_PRPS, data) != E_NONE) + { + XFREE(MTYPE_CSG, data); + } + return; } @@ -224,7 +245,7 @@ void _hf_trend_recv(uint8_t slot, char *pkt, uint16_t len) ack.result = 0; ack.boosterpack = head_trend->boosterpack; memcpy(ack_p, &ack, sizeof(hf_trend_ack_t)); - dau_send_data(dau, &head_data); + dau_data_send(dau, &head_data); return; } @@ -287,7 +308,7 @@ void _hf_event_recv(uint8_t slot, char *pkt, uint16_t len) ack.result = 0; ack.boosterpack = head_event->boosterpack; memcpy(ack_p, &ack, sizeof(hf_event_ack_t)); - dau_send_data(dau, &head_data); + dau_data_send(dau, &head_data); return; }