/******************************************************************************* * 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*/