mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-04-20 13:31:58 -04:00
163 lines
4.4 KiB
C
163 lines
4.4 KiB
C
/*******************************************************************************
|
||
* 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 <EFBFBD>C<EFBFBD> {
|
||
#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*/ |