3.2.8.3 Net Socket Service
SYS_RNWF_RESULT_t SYS_RNWF_NET_SOCK_SrvCtrl( SYS_RNWF_NET_SOCK_SERVICE_t request, void *input)
Net System Service Configuration in MCC
This section allows NET service basic configuration as mentioned below:
- Number of Sockets: Configure this field in the range of 1-2.
- Bind type: Selection of binding type.
- Socket Port: Socket port number.
- Ip Protocol: TCP/UDP protocol selection.
- Socket address: Enter the respective server IP address.
- Mode: Server/Client Mode Selection
- Enable TLS: Select to enable TLS Configuration option.
- Root CA / Server Certificate
- Device Certificate
- Device Key
- Device Key Password
- Server Name
- Domain Name
Services/Options | Input Parameters | Description |
---|---|---|
SYS_RNWF_NET_TLS_CONFIG_1 |
TLS configuration list: CA name, Certificate name, Key name, Key password, server name | Use the TLS configuration 1 |
SYS_RNWF_NET_TLS_CONFIG_2 |
TLS configuration list: CA name, Certificate name, Key name, Key password, server name | Use the TLS configuration 2 |
SYS_RNWF_NET_DHCP_SERVER_ENABLE |
DHCP Configuration: Set IP, Pool start,
Parameter ID (Int) |
Enable the DHCP server |
SYS_RNWF_NET_DHCP_SERVER_DISABLE |
None | Disable the DHCP server |
SYS_RNWF_NET_SOCK_TCP_OPEN |
None | Open TCP socket. Returns socket ID. |
SYS_RNWF_NET_SOCK_UDP_OPEN |
None | Open UDP socket. Returns socket ID. |
SYS_RNWF_NET_SOCK_CLOSE |
Socket ID (Int) | Close the socket |
SYS_RNWF_NET_SOCK_CONFIG |
Socket ID | Configures the socket settings |
SYS_RNWF_NET_SOCK_SET_CALLBACK |
Callback function handler | Register application callback for socket |
The events that are returned in the Net socket service are provided below:
Events | Response Components | Description |
---|---|---|
SYS_RNWF_NET_SOCK_EVENT_CONNECTED |
Socket ID (Integer) |
Reports the socket connected event |
SYS_RNWF_NET_SOCK_EVENT_TLS_DONE |
Socket ID (Integer) | TLS handshake done, on this event the TLS configuration instance can be re used for other TLS sessions |
SYS_RNWF_NET_SOCK_EVENT_DISCONNECTED |
Socket ID (Integer) | Socket disconnected |
SYS_RNWF_NET_SOCK_EVENT_READ |
Socket ID
(Integer) Length (Integer) |
Reports the length of data available on the given socket ID |
SYS_RNWF_NET_SOCK_EVENT_ERROR |
Socket ID (Integer) |
Reports the socket error events |
The basic net socket service sequence chart is provided below:
Socket Write
SYS_RNWF_RESULT_t SYS_RNWF_NET_TcpSockWrite( uint32_t socket, uint16_t length, uint8_t *input)
SYS_RNWF_RESULT_t SYS_RNWF_NET_UdpSockWrite( uint32_t socket, uint8_t *addr, uint32_t port, uint16_t length, uint8_t *input)
Socket
Read The socket service provides the read API for the TCP and UDP sockets. Following are the API prototypes:
int16_t SYS_RNWF_NET_TcpSockRead( uint32_t socket, uint16_t length, uint8_t *buffer)
int16_t SYS_RNWF_NET_UdpSockRead( uint32_t socket, uint16_t length, uint8_t *buffer)
The sample TCP socket example is provided below:
/* Main application */ /* TCP Socket Configurations*/ SYS_RNWF_NET_SOCKET_t g_tcpClientSocket = { .bind_type = SYS_RNWF_NET_BIND_TYPE0, .sock_port = SYS_RNWF_NET_SOCK_PORT0, .sock_type = SYS_RNWF_NET_SOCK_TYPE0, .sock_addr = SYS_RNWF_NET_SOCK_ADDR0, }; /* Application Wi-fi Callback Handler function */ void SYS_RNWF_WIFI_CallbackHandler(SYS_RNWF_WIFI_EVENT_t event, uint8_t *p_str) { switch(event) { /* SNTP UP event code*/ case SYS_RNWF_SNTP_UP: { SYS_CONSOLE_PRINT("SNTP UP:%s\n", &p_str[2]); break; } /* Wi-Fi connected event code*/ case SYS_RNWF_CONNECTED: { SYS_CONSOLE_PRINT("Wi-Fi Connected \r\n"); break; } /* Wi-Fi disconnected event code*/ case SYS_RNWF_DISCONNECTED: { SYS_CONSOLE_PRINT("Wi-Fi Disconnected\nReconnecting... \r\n"); SYS_CONSOLE_PRINT("Connecting to server\r\n"); SYS_RNWF_WIFI_SrvCtrl(SYS_RNWF_STA_CONNECT, NULL); break; } /* Wi-Fi DHCP complete event code*/ case SYS_RNWF_DHCP_DONE: { SYS_CONSOLE_PRINT("DHCP Done...%s \r\n",&p_str[2]); SYS_RNWF_NET_SockSrvCtrl(SYS_RNWF_NET_SOCK_TCP_OPEN, &g_tcpClientSocket); break; } /* Wi-Fi scan indication event code*/ case SYS_RNWF_SCAN_INDICATION: { break; } /* Wi-Fi scan complete event code*/ case SYS_RNWF_SCAN_DONE: { break; } default: break; } } /* Application NET socket Callback Handler function */ void SYS_RNWF_NET_SockCallbackHandler(uint32_t socket, SYS_RNWF_NET_SOCK_EVENT_t event, uint8_t *p_str) { switch(event) { /* Net socket connected event code*/ case SYS_RNWF_NET_SOCK_EVENT_CONNECTED: { SYS_CONSOLE_PRINT("Connected to Server!\r\n" ); break; } /* Net socket disconnected event code*/ case SYS_RNWF_NET_SOCK_EVENT_DISCONNECTED: { SYS_CONSOLE_PRINT("DisConnected!\r\n"); SYS_RNWF_NET_SockSrvCtrl(SYS_RNWF_NET_SOCK_CLOSE, &socket); break; } /* Net socket error event code*/ case SYS_RNWF_NET_SOCK_EVENT_ERROR: { SYS_CONSOLE_PRINT("ERROR : %s\r\n",p_str); break; } /* Net socket read event code*/ case SYS_RNWF_NET_SOCK_EVENT_READ: { uint8_t rx_data[64]; int32_t rcvd_len; uint16_t rx_len = *(uint16_t *)p_str; memset(rx_data,0,64); if((rx_len < 64) && (rcvd_len = SYS_RNWF_NET_TcpSockRead(socket, rx_len, rx_data)) > 0) { rx_data[rx_len] = '\n'; SYS_CONSOLE_PRINT("Rx->%s\r\n", rx_data); SYS_RNWF_NET_TcpSockWrite(socket, rx_len, rx_data); } break; } default: break; } } /* Application Initialization function */ void APP_Initialize ( void ) { /* Place the App state machine in its initial state. */ g_appData.state = APP_STATE_INITIALIZE; } /* Maintain the application's state machine.*/ void APP_Tasks ( void ) { switch(g_appData.state) { /* Application's state machine's initial state. */ case APP_STATE_INITIALIZE: { DMAC_ChannelCallbackRegister(DMAC_CHANNEL_0, APP_RNWF_usartDmaChannelHandler, 0); SYS_RNWF_IF_Init(); g_appData.state = APP_STATE_REGISTER_CALLBACK; SYS_CONSOLE_PRINT("Start Of Application\r\n"); break; } /* Register the necessary callbacks */ case APP_STATE_REGISTER_CALLBACK: { SYS_RNWF_SYSTEM_SrvCtrl(SYS_RNWF_SYSTEM_GET_MAN_ID, g_appBuf); SYS_CONSOLE_PRINT("Manufacturer = %s\r\n", g_appBuf); /* RNWF Application Callback register */ SYS_RNWF_WIFI_SrvCtrl(SYS_RNWF_WIFI_SET_CALLBACK, SYS_RNWF_WIFI_CallbackHandler); SYS_RNWF_NET_SockSrvCtrl(SYS_RNWF_NET_SOCK_SET_CALLBACK, SYS_RNWF_NET_SockCallbackHandler); /* Wi-Fi Connectivity */ SYS_RNWF_WIFI_PARAM_t wifi_sta_cfg = {SYS_RNWF_WIFI_MODE_STA, SYS_RNWF_WIFI_STA_SSID, SYS_RNWF_WIFI_STA_PWD, SYS_RNWF_STA_SECURITY, SYS_RNWF_WIFI_STA_AUTOCONNECT}; SYS_RNWF_WIFI_SrvCtrl(SYS_RNWF_SET_WIFI_PARAMS, &wifi_sta_cfg); g_appData.state = APP_STATE_TASK; break; } /* Run Event handler */ case APP_STATE_TASK: { SYS_RNWF_IF_EventHandler(); break; } default: { break; } } }