#include "ProtocolDecoders.h"
/* Macros: */
- /** Maximum number of TCP ports which can be open at the one time */
+ /** Maximum number of TCP ports which can be open at the one time. */
#define MAX_OPEN_TCP_PORTS 1
- /** Maximum number of TCP connections which can be sustained at the one time */
+ /** Maximum number of TCP connections which can be sustained at the one time. */
#define MAX_TCP_CONNECTIONS 3
- /** TCP window size, giving the maximum number of bytes which can be buffered at the one time */
+ /** TCP window size, giving the maximum number of bytes which can be buffered at the one time. */
#define TCP_WINDOW_SIZE 512
- /** Port number for HTTP transmissions */
+ /** Port number for HTTP transmissions. */
#define TCP_PORT_HTTP SwapEndian_16(80)
- /** Data direction indicator for a TCP application buffer, indicating data from host-to-device */
+ /** Data direction indicator for a TCP application buffer, indicating data from host-to-device. */
#define TCP_PACKETDIR_IN false
- /** Data direction indicator for a TCP application buffer, indicating data from device-to-host */
+ /** Data direction indicator for a TCP application buffer, indicating data from device-to-host. */
#define TCP_PACKETDIR_OUT true
- /** Congestion Window Reduced TCP flag mask */
+ /** Congestion Window Reduced TCP flag mask. */
#define TCP_FLAG_CWR (1 << 7)
- /** Explicit Congestion Notification TCP flag mask */
+ /** Explicit Congestion Notification TCP flag mask. */
#define TCP_FLAG_ECE (1 << 6)
- /** Urgent TCP flag mask */
+ /** Urgent TCP flag mask. */
#define TCP_FLAG_URG (1 << 5)
- /** Data Acknowledge TCP flag mask */
+ /** Data Acknowledge TCP flag mask. */
#define TCP_FLAG_ACK (1 << 4)
- /** Data Push TCP flag mask */
+ /** Data Push TCP flag mask. */
#define TCP_FLAG_PSH (1 << 3)
- /** Reset TCP flag mask */
+ /** Reset TCP flag mask. */
#define TCP_FLAG_RST (1 << 2)
- /** Synchronize TCP flag mask */
+ /** Synchronize TCP flag mask. */
#define TCP_FLAG_SYN (1 << 1)
- /** Connection Finalize TCP flag mask */
+ /** Connection Finalize TCP flag mask. */
#define TCP_FLAG_FIN (1 << 0)
/** Application macro: Determines if the given application buffer contains a packet received from the host
/** Application macro: Captures the application buffer, locking it for device-to-host transmissions only. This should be
* performed when the application needs to transmit several packets worth of data in succession with no interruptions from the host.
*
- * \note The application must check that the buffer can be locked first using TCP_APP_CAN_CAPTURE_BUFFER().
+ * \pre The application must check that the buffer can be locked first using TCP_APP_CAN_CAPTURE_BUFFER().
*
* \param[in] Buffer Application buffer to lock
*/
#define TCP_APP_CLOSECONNECTION(Connection) MACROS{ Connection->State = TCP_Connection_Closing; }MACROE
/* Enums: */
- /** Enum for possible TCP port states */
+ /** Enum for possible TCP port states. */
enum TCP_PortStates_t
{
TCP_Port_Closed = 0, /**< TCP port closed, no connections to a host may be made on this port. */
TCP_Port_Open = 1, /**< TCP port open, connections to a host may be made on this port. */
};
- /** Enum for possible TCP connection states */
+ /** Enum for possible TCP connection states. */
enum TCP_ConnectionStates_t
{
TCP_Connection_Listen = 0, /**< Listening for a connection from a host */
};
/* Type Defines: */
- /** Type define for a TCP connection buffer structure, including size, data and direction */
+ /** Type define for a TCP connection buffer structure, including size, data and direction. */
typedef struct
{
uint16_t Length; /**< Length of data in the TCP application buffer */
bool Ready; /**< If data from host, indicates buffer ready to be read, otherwise indicates
* buffer ready to be sent to the host
*/
- bool InUse; /** Indicates if the buffer is locked to to the current direction, and cannot be changed */
+ bool InUse; /**< Indicates if the buffer is locked to to the current direction, and cannot be changed */
} TCP_ConnectionBuffer_t;
- /** Type define for a TCP connection information structure */
+ /** Type define for a TCP connection information structure. */
typedef struct
{
uint32_t SequenceNumberIn; /**< Current TCP sequence number for host-to-device */
TCP_ConnectionBuffer_t Buffer; /**< Connection application data buffer */
} TCP_ConnectionInfo_t;
- /** Type define for a complete TCP connection state */
+ /** Type define for a complete TCP connection state. */
typedef struct
{
uint16_t Port; /**< Connection port number on the device */
uint8_t State; /**< Current connection state, a value from the TCP_ConnectionStates_t enum */
} TCP_ConnectionState_t;
- /** Type define for a TCP port state */
+ /** Type define for a TCP port state. */
typedef struct
{
uint16_t Port; /**< TCP port number on the device */
TCP_ConnectionBuffer_t* Buffer); /**< Port application handler */
} TCP_PortState_t;
- /** Type define for a TCP packet header */
+ /** Type define for a TCP packet header. */
typedef struct
{
uint16_t SourcePort; /**< Source port of the TCP packet */
uint32_t SequenceNumber; /**< Data sequence number of the packet */
uint32_t AcknowledgmentNumber; /**< Data acknowledgment number of the packet */
- unsigned char Reserved : 4; /**< Reserved, must be all 0 */
+ unsigned char Reserved : 4; /**< Reserved, must be all 0 */
unsigned char DataOffset : 4; /**< Offset of the data from the start of the header, in 4 byte chunks */
uint8_t Flags; /**< TCP packet flags */
uint16_t WindowSize; /**< Current data window size (bytes remaining in reception buffer) */
uint16_t UrgentPointer; /**< Urgent data pointer */
} TCP_Header_t;
- /* External Variables: */
- TCP_PortState_t PortStateTable[MAX_OPEN_TCP_PORTS];
-
/* Function Prototypes: */
void TCP_Init(void);
void TCP_Task(void);
- bool TCP_SetPortState(uint16_t Port, uint8_t State, void (*Handler)(TCP_ConnectionState_t*, TCP_ConnectionBuffer_t*));
- uint8_t TCP_GetPortState(uint16_t Port);
- bool TCP_SetConnectionState(uint16_t Port, IP_Address_t RemoteAddress, uint16_t RemotePort, uint8_t State);
- uint8_t TCP_GetConnectionState(uint16_t Port, IP_Address_t RemoteAddress, uint16_t RemotePort);
- TCP_ConnectionInfo_t* TCP_GetConnectionInfo(uint16_t Port, IP_Address_t RemoteAddress, uint16_t RemotePort);
- int16_t TCP_ProcessTCPPacket(void* IPHeaderInStart, void* TCPHeaderInStart, void* TCPHeaderOutStart);
+ bool TCP_SetPortState(const uint16_t Port,
+ const uint8_t State,
+ void (*Handler)(TCP_ConnectionState_t*, TCP_ConnectionBuffer_t*));
+ uint8_t TCP_GetPortState(const uint16_t Port);
+ bool TCP_SetConnectionState(const uint16_t Port,
+ const IP_Address_t RemoteAddress,
+ const uint16_t RemotePort,
+ const uint8_t State);
+ uint8_t TCP_GetConnectionState(const uint16_t Port,
+ const IP_Address_t RemoteAddress,
+ const uint16_t RemotePort);
+ TCP_ConnectionInfo_t* TCP_GetConnectionInfo(const uint16_t Port,
+ const IP_Address_t RemoteAddress,
+ const uint16_t RemotePort);
+ int16_t TCP_ProcessTCPPacket(void* IPHeaderInStart,
+ void* TCPHeaderInStart,
+ void* TCPHeaderOutStart);
#if defined(INCLUDE_FROM_TCP_C)
- static uint16_t TCP_Checksum16(void* TCPHeaderOutStart, IP_Address_t SourceAddress,
- IP_Address_t DestinationAddress, uint16_t TCPOutSize);
+ static uint16_t TCP_Checksum16(void* TCPHeaderOutStart,
+ const IP_Address_t SourceAddress,
+ const IP_Address_t DestinationAddress,
+ uint16_t TCPOutSize);
#endif
#endif