mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-08-20 01:58:32 -04:00
Update FreeRTOS+Trace recorder library to v3.0.2
Add streaming version of the FreeRTOS+Trace recorder, also V3.0.2
This commit is contained in:
parent
f218cf5680
commit
96ff3925d2
32 changed files with 6067 additions and 123 deletions
|
@ -0,0 +1,163 @@
|
|||
/*******************************************************************************
|
||||
* 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*/
|
Loading…
Add table
Add a link
Reference in a new issue