| /******************************************************************************* | |
| * Trace Recorder Library for Tracealyzer v3.0.2 | |
| * Percepio AB, www.percepio.com | |
| * | |
| * trcTCPIPConfig.h | |
| * | |
| * Trace TCP/IP configuration. Modify these includes and functions to perform | |
| * the same functionality using your specific TCP/IP stack. | |
| * Will only be included by trcTCPIP.c. | |
| * | |
| * Terms of Use | |
| * This software (the "Tracealyzer Recorder Library") is the intellectual | |
| * property of Percepio AB and may not be sold or in other ways commercially | |
| * redistributed without explicit written permission by Percepio AB. | |
| * | |
| * Separate conditions applies for the SEGGER branded source code included. | |
| * | |
| * The recorder library is free for use together with Percepio products. | |
| * You may distribute the recorder library in its original form, but public | |
| * distribution of modified versions require approval by Percepio AB. | |
| * | |
| * Disclaimer | |
| * The trace tool and recorder library is being delivered to you AS IS and | |
| * Percepio AB makes no warranty as to its use or performance. Percepio AB does | |
| * not and cannot warrant the performance or results you may obtain by using the | |
| * software or documentation. Percepio AB make no warranties, express or | |
| * implied, as to noninfringement of third party rights, merchantability, or | |
| * fitness for any particular purpose. In no event will Percepio AB, its | |
| * technology partners, or distributors be liable to you for any consequential, | |
| * incidental or special damages, including any lost profits or lost savings, | |
| * even if a representative of Percepio AB has been advised of the possibility | |
| * of such damages, or for any claim by any third party. Some jurisdictions do | |
| * not allow the exclusion or limitation of incidental, consequential or special | |
| * damages, or the exclusion of implied warranties or limitations on how long an | |
| * implied warranty may last, so the above limitations may not apply to you. | |
| * | |
| * Tabs are used for indent in this file (1 tab = 4 spaces) | |
| * | |
| * Copyright Percepio AB, 2015. | |
| * www.percepio.com | |
| ******************************************************************************/ | |
| #ifndef TRC_TCPIP_CONFIG_H | |
| #define TRC_TCPIP_CONFIG_H | |
| #ifdef __cplusplus | |
| extern C { | |
| #endif | |
| /* TCP/IP includes*/ | |
| #include "tcpip.h" | |
| #define TRC_TCPIP_PORT 12000 | |
| socket* sock = NULL; | |
| socket* listenerSocket = NULL; | |
| int32_t trcSocketSend(void* data, int32_t size, int32_t* bytesWritten) | |
| { | |
| int32_t error; | |
| if (sock == NULL) | |
| return 1; | |
| error = socket_send(sock, data, size, (size_t*)bytesWritten, 0); | |
| if (error) | |
| { | |
| socket_close(sock); | |
| sock = NULL; | |
| } | |
| return (int32_t)error; | |
| } | |
| int32_t trcSocketReceive(void* data, int32_t size, int32_t* bytesRead) | |
| { | |
| int32_t error; | |
| if (sock == NULL) | |
| return 1; | |
| error = socket_receive(sock, data, size, (size_t*)bytesRead, SOCKET_WAIT_ALL); | |
| if (error != ERROR_NONE && error != ERROR_TIMEOUT) /* Timeout may be expected when there is no data */ | |
| { | |
| socket_close(sock); | |
| sock = NULL; | |
| return error; | |
| } | |
| return 0; | |
| } | |
| int32_t trcSocketInitializeListener() | |
| { | |
| int32_t error; | |
| if (listenerSocket) | |
| return 0; | |
| //Start of exception handling block | |
| do | |
| { | |
| listenerSocket = socket_open(SOCKET_STREAM, SOCKET_TCP); | |
| if(listenerSocket == NULL) | |
| { | |
| error = 1; | |
| break; | |
| } | |
| error = socket_set_timeout(listenerSocket, INFINITE); | |
| if(error) break; | |
| error = socket_set_tx_buffer_size(listenerSocket, 1440 * 2); | |
| if(error) break; | |
| error = socket_set_rx_buffer_size(listenerSocket, 128); | |
| if(error) break; | |
| error = socket_bind_to_interface(listenerSocket, pNetInterface); | |
| if(error) break; | |
| error = socket_bind(listenerSocket, ADDR_ANY, TRC_TCPIP_PORT); | |
| if(error) break; | |
| error = socket_listen(listenerSocket); | |
| if(error) break; | |
| } while(0); | |
| if(error) | |
| { | |
| socket_close(listenerSocket); | |
| listenerSocket = NULL; | |
| } | |
| return error; | |
| } | |
| int32_t trcSocketAccept() | |
| { | |
| ip_addr clientIpAddr; | |
| uint16_t clientPort; | |
| if (sock != NULL) | |
| return 0; | |
| if (listenerSocket == NULL) | |
| return 1; | |
| /* Wait for connection */ | |
| sock = socket_accept(listenerSocket, &clientIpAddr, &clientPort); | |
| if(sock != NULL) | |
| { | |
| socket_set_timeout(sock, 20); | |
| } | |
| else | |
| return 1; | |
| return 0; | |
| } | |
| #ifdef __cplusplus | |
| } | |
| #endif | |
| #endif /*TRC_TCPIP_CONFIG_H*/ |