#ifndef MODBUSTCP_H_ #define MODBUSTCP_H_ #include "lwip/debug.h" #include "lwip/stats.h" #include "lwip/tcp.h" #include "../CONTROL_CONCURRENCIA/queue.h" #include "../MEM_MGT/mempools.h" #define MTCP_MAX_RETRIES 10 #define MTCP_QUEUE modbusTcpQueue #define MTCP_QUEUE_BUF *mQueueBuffer[18] #define MTCP_MEMP modbusTcpMemp #ifndef MTCP_MAX_CONNS #define MTCP_MAX_CONNS 5 #endif extern queue_t MTCP_QUEUE; extern void MTCP_QUEUE_BUF; extern mempool_config MTCP_MEMP; enum conn_status { MB_NONE = 0, MB_CONNECTED, MB_WAIT_TO_CLOSE, MB_CLOSING }; typedef struct { uint16_t transactionId; uint16_t protocol; uint16_t len; uint8_t unitId; } mbTcp_mbapHeader; #define MBAP_PROTO_MB 0 typedef struct { uint8_t estado; uint8_t retries; struct tcp_pcb *pcb; uint8_t *sendP; uint8_t sendLen; } mbTcp_status; void modbusTcpStart(uint16_t port); void modbusTcpStop(void); err_t modbusTcpAccept(void *arg, struct tcp_pcb *pcb, err_t err); err_t modbusTcpRecv(void *arg, struct tcp_pcb *mPcb, struct pbuf *p, err_t err); void modbusTcpError(void *arg, err_t err); err_t modbusTcpPoll(void *arg, struct tcp_pcb *mPcb); void modbusTcpSend(struct tcp_pcb *mPcb, mbTcp_status *mbStatus); err_t modbusTcpSent(void *arg, struct tcp_pcb *pcb, u16_t len); void modbusTcpClose(struct tcp_pcb *pcb, mbTcp_status *mbStatus); uint16_t swapBytes(uint8_t *ptr); extern uint8_t mTcpCallGood(mbTcp_status *status, struct pbuf *p, mbTcp_mbapHeader hdr) #endif