mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-04-20 05:21:59 -04:00
Fix some build issues in older kernel demo projects.
Update to V2.0.7 of the TCP/IP stack: + Multiple security improvements and fixes in packet parsing routines, DNS caching, and TCP sequence number and ID generation. + Disable NBNS and LLMNR by default. + Add TCP hang protection by default. We thank Ori Karliner of Zimperium zLabs Team for reporting these issues.
This commit is contained in:
parent
fb9de58f56
commit
bdb088e66f
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* FreeRTOS+TCP V2.0.3
|
* FreeRTOS+TCP V2.0.7
|
||||||
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
@ -211,7 +211,10 @@ uint32_t ulTargetProtocolAddress, ulSenderProtocolAddress;
|
||||||
|
|
||||||
void vARPRefreshCacheEntry( const MACAddress_t * pxMACAddress, const uint32_t ulIPAddress )
|
void vARPRefreshCacheEntry( const MACAddress_t * pxMACAddress, const uint32_t ulIPAddress )
|
||||||
{
|
{
|
||||||
BaseType_t x, xIpEntry = -1, xMacEntry = -1, xUseEntry = 0;
|
BaseType_t x = 0;
|
||||||
|
BaseType_t xIpEntry = -1;
|
||||||
|
BaseType_t xMacEntry = -1;
|
||||||
|
BaseType_t xUseEntry = 0;
|
||||||
uint8_t ucMinAgeFound = 0U;
|
uint8_t ucMinAgeFound = 0U;
|
||||||
|
|
||||||
#if( ipconfigARP_STORES_REMOTE_ADDRESSES == 0 )
|
#if( ipconfigARP_STORES_REMOTE_ADDRESSES == 0 )
|
||||||
|
@ -599,7 +602,7 @@ ARPPacket_t *pxARPPacket;
|
||||||
xARPHeader.usOperation;
|
xARPHeader.usOperation;
|
||||||
xARPHeader.xTargetHardwareAddress;
|
xARPHeader.xTargetHardwareAddress;
|
||||||
*/
|
*/
|
||||||
memcpy( ( void * ) &( pxARPPacket->xEthernetHeader ), ( void * ) xDefaultPartARPPacketHeader, sizeof( xDefaultPartARPPacketHeader ) );
|
memcpy( ( void * ) pxARPPacket, ( void * ) xDefaultPartARPPacketHeader, sizeof( xDefaultPartARPPacketHeader ) );
|
||||||
memcpy( ( void * ) pxARPPacket->xEthernetHeader.xSourceAddress.ucBytes , ( void * ) ipLOCAL_MAC_ADDRESS, ( size_t ) ipMAC_ADDRESS_LENGTH_BYTES );
|
memcpy( ( void * ) pxARPPacket->xEthernetHeader.xSourceAddress.ucBytes , ( void * ) ipLOCAL_MAC_ADDRESS, ( size_t ) ipMAC_ADDRESS_LENGTH_BYTES );
|
||||||
memcpy( ( void * ) pxARPPacket->xARPHeader.xSenderHardwareAddress.ucBytes, ( void * ) ipLOCAL_MAC_ADDRESS, ( size_t ) ipMAC_ADDRESS_LENGTH_BYTES );
|
memcpy( ( void * ) pxARPPacket->xARPHeader.xSenderHardwareAddress.ucBytes, ( void * ) ipLOCAL_MAC_ADDRESS, ( size_t ) ipMAC_ADDRESS_LENGTH_BYTES );
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* FreeRTOS+TCP V2.0.3
|
* FreeRTOS+TCP V2.0.7
|
||||||
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
@ -63,17 +63,17 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Codes of interest found in the DHCP options field. */
|
/* Codes of interest found in the DHCP options field. */
|
||||||
#define dhcpIPv4_ZERO_PAD_OPTION_CODE ( 0u )
|
#define dhcpZERO_PAD_OPTION_CODE ( 0u )
|
||||||
#define dhcpIPv4_SUBNET_MASK_OPTION_CODE ( 1u )
|
#define dhcpSUBNET_MASK_OPTION_CODE ( 1u )
|
||||||
#define dhcpIPv4_GATEWAY_OPTION_CODE ( 3u )
|
#define dhcpGATEWAY_OPTION_CODE ( 3u )
|
||||||
#define dhcpIPv4_DNS_SERVER_OPTIONS_CODE ( 6u )
|
#define dhcpDNS_SERVER_OPTIONS_CODE ( 6u )
|
||||||
#define dhcpIPv4_DNS_HOSTNAME_OPTIONS_CODE ( 12u )
|
#define dhcpDNS_HOSTNAME_OPTIONS_CODE ( 12u )
|
||||||
#define dhcpIPv4_REQUEST_IP_ADDRESS_OPTION_CODE ( 50u )
|
#define dhcpREQUEST_IP_ADDRESS_OPTION_CODE ( 50u )
|
||||||
#define dhcpIPv4_LEASE_TIME_OPTION_CODE ( 51u )
|
#define dhcpLEASE_TIME_OPTION_CODE ( 51u )
|
||||||
#define dhcpIPv4_MESSAGE_TYPE_OPTION_CODE ( 53u )
|
#define dhcpMESSAGE_TYPE_OPTION_CODE ( 53u )
|
||||||
#define dhcpIPv4_SERVER_IP_ADDRESS_OPTION_CODE ( 54u )
|
#define dhcpSERVER_IP_ADDRESS_OPTION_CODE ( 54u )
|
||||||
#define dhcpIPv4_PARAMETER_REQUEST_OPTION_CODE ( 55u )
|
#define dhcpPARAMETER_REQUEST_OPTION_CODE ( 55u )
|
||||||
#define dhcpIPv4_CLIENT_IDENTIFIER_OPTION_CODE ( 61u )
|
#define dhcpCLIENT_IDENTIFIER_OPTION_CODE ( 61u )
|
||||||
|
|
||||||
/* The four DHCP message types of interest. */
|
/* The four DHCP message types of interest. */
|
||||||
#define dhcpMESSAGE_TYPE_DISCOVER ( 1 )
|
#define dhcpMESSAGE_TYPE_DISCOVER ( 1 )
|
||||||
|
@ -113,9 +113,7 @@ to ensure the walk has not gone past the end of the valid options. 2 bytes is
|
||||||
made up of the length byte, and minimum one byte value. */
|
made up of the length byte, and minimum one byte value. */
|
||||||
#define dhcpMAX_OPTION_LENGTH_OF_INTEREST ( 2L )
|
#define dhcpMAX_OPTION_LENGTH_OF_INTEREST ( 2L )
|
||||||
|
|
||||||
/* Standard DHCP port numbers and magic cookie value.
|
/* Standard DHCP port numbers and magic cookie value. */
|
||||||
DHCPv4 uses UDP port number 68 for clients and port number 67 for servers.
|
|
||||||
*/
|
|
||||||
#if( ipconfigBYTE_ORDER == pdFREERTOS_LITTLE_ENDIAN )
|
#if( ipconfigBYTE_ORDER == pdFREERTOS_LITTLE_ENDIAN )
|
||||||
#define dhcpCLIENT_PORT 0x4400u
|
#define dhcpCLIENT_PORT 0x4400u
|
||||||
#define dhcpSERVER_PORT 0x4300u
|
#define dhcpSERVER_PORT 0x4300u
|
||||||
|
@ -361,13 +359,21 @@ BaseType_t xGivingUp = pdFALSE;
|
||||||
|
|
||||||
if( xDHCPData.xDHCPTxPeriod <= ipconfigMAXIMUM_DISCOVER_TX_PERIOD )
|
if( xDHCPData.xDHCPTxPeriod <= ipconfigMAXIMUM_DISCOVER_TX_PERIOD )
|
||||||
{
|
{
|
||||||
xDHCPData.ulTransactionId++;
|
xDHCPData.ulTransactionId = ipconfigRAND32( );
|
||||||
xDHCPData.xDHCPTxTime = xTaskGetTickCount();
|
|
||||||
|
if( 0 != xDHCPData.ulTransactionId )
|
||||||
|
{
|
||||||
|
xDHCPData.xDHCPTxTime = xTaskGetTickCount( );
|
||||||
xDHCPData.xUseBroadcast = !xDHCPData.xUseBroadcast;
|
xDHCPData.xUseBroadcast = !xDHCPData.xUseBroadcast;
|
||||||
prvSendDHCPDiscover( );
|
prvSendDHCPDiscover( );
|
||||||
FreeRTOS_debug_printf( ( "vDHCPProcess: timeout %lu ticks\n", xDHCPData.xDHCPTxPeriod ) );
|
FreeRTOS_debug_printf( ( "vDHCPProcess: timeout %lu ticks\n", xDHCPData.xDHCPTxPeriod ) );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
FreeRTOS_debug_printf( ( "vDHCPProcess: failed to generate a random Transaction ID\n" ) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
FreeRTOS_debug_printf( ( "vDHCPProcess: giving up %lu > %lu ticks\n", xDHCPData.xDHCPTxPeriod, ipconfigMAXIMUM_DISCOVER_TX_PERIOD ) );
|
FreeRTOS_debug_printf( ( "vDHCPProcess: giving up %lu > %lu ticks\n", xDHCPData.xDHCPTxPeriod, ipconfigMAXIMUM_DISCOVER_TX_PERIOD ) );
|
||||||
|
|
||||||
|
@ -517,7 +523,7 @@ BaseType_t xGivingUp = pdFALSE;
|
||||||
{
|
{
|
||||||
/* xGivingUp became true either because of a time-out, or because
|
/* xGivingUp became true either because of a time-out, or because
|
||||||
xApplicationDHCPHook() returned another value than 'eDHCPContinue',
|
xApplicationDHCPHook() returned another value than 'eDHCPContinue',
|
||||||
meaning that the conversion is cancelled from here. */
|
meaning that the conversion is canceled from here. */
|
||||||
|
|
||||||
/* Revert to static IP address. */
|
/* Revert to static IP address. */
|
||||||
taskENTER_CRITICAL();
|
taskENTER_CRITICAL();
|
||||||
|
@ -585,15 +591,10 @@ TickType_t xTimeoutTime = ( TickType_t ) 0;
|
||||||
|
|
||||||
static void prvInitialiseDHCP( void )
|
static void prvInitialiseDHCP( void )
|
||||||
{
|
{
|
||||||
/* Initialise the parameters that will be set by the DHCP process. */
|
/* Initialise the parameters that will be set by the DHCP process. Per
|
||||||
if( xDHCPData.ulTransactionId == 0ul )
|
https://www.ietf.org/rfc/rfc2131.txt, Transaction ID should be a random
|
||||||
{
|
value chosen by the client. */
|
||||||
xDHCPData.ulTransactionId = ipconfigRAND32();
|
xDHCPData.ulTransactionId = ipconfigRAND32();
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
xDHCPData.ulTransactionId++;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Check for random number generator API failure. */
|
/* Check for random number generator API failure. */
|
||||||
if( 0 != xDHCPData.ulTransactionId )
|
if( 0 != xDHCPData.ulTransactionId )
|
||||||
|
@ -631,11 +632,14 @@ const uint32_t ulMandatoryOptions = 2ul; /* DHCP server address, and the correct
|
||||||
pxDHCPMessage = ( DHCPMessage_t * ) ( pucUDPPayload );
|
pxDHCPMessage = ( DHCPMessage_t * ) ( pucUDPPayload );
|
||||||
|
|
||||||
/* Sanity check. */
|
/* Sanity check. */
|
||||||
if( ( pxDHCPMessage->ulDHCPCookie == ( uint32_t ) dhcpCOOKIE ) &&
|
if( ( lBytes >= sizeof( DHCPMessage_t ) ) &&
|
||||||
|
( pxDHCPMessage->ulDHCPCookie == ( uint32_t ) dhcpCOOKIE ) &&
|
||||||
( pxDHCPMessage->ucOpcode == ( uint8_t ) dhcpREPLY_OPCODE ) &&
|
( pxDHCPMessage->ucOpcode == ( uint8_t ) dhcpREPLY_OPCODE ) &&
|
||||||
( pxDHCPMessage->ulTransactionID == FreeRTOS_htonl( xDHCPData.ulTransactionId ) ) )
|
( pxDHCPMessage->ulTransactionID == FreeRTOS_htonl( xDHCPData.ulTransactionId ) ) )
|
||||||
{
|
{
|
||||||
if( memcmp( ( void * ) &( pxDHCPMessage->ucClientHardwareAddress ), ( void * ) ipLOCAL_MAC_ADDRESS, sizeof( MACAddress_t ) ) == 0 )
|
if( memcmp( ( void * ) &( pxDHCPMessage->ucClientHardwareAddress ),
|
||||||
|
( void * ) ipLOCAL_MAC_ADDRESS,
|
||||||
|
sizeof( MACAddress_t ) ) == 0 )
|
||||||
{
|
{
|
||||||
/* None of the essential options have been processed yet. */
|
/* None of the essential options have been processed yet. */
|
||||||
ulProcessed = 0ul;
|
ulProcessed = 0ul;
|
||||||
|
@ -648,28 +652,52 @@ const uint32_t ulMandatoryOptions = 2ul; /* DHCP server address, and the correct
|
||||||
while( pucByte < pucLastByte )
|
while( pucByte < pucLastByte )
|
||||||
{
|
{
|
||||||
ucOptionCode = pucByte[ 0 ];
|
ucOptionCode = pucByte[ 0 ];
|
||||||
if( ucOptionCode == ( uint8_t ) dhcpOPTION_END_BYTE )
|
if( ucOptionCode == dhcpOPTION_END_BYTE )
|
||||||
{
|
{
|
||||||
/* Ready, the last byte has been seen. */
|
/* Ready, the last byte has been seen. */
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if( ucOptionCode == ( uint8_t ) dhcpIPv4_ZERO_PAD_OPTION_CODE )
|
if( ucOptionCode == dhcpZERO_PAD_OPTION_CODE )
|
||||||
{
|
{
|
||||||
/* The value zero is used as a pad byte,
|
/* The value zero is used as a pad byte,
|
||||||
it is not followed by a length byte. */
|
it is not followed by a length byte. */
|
||||||
pucByte += 1;
|
pucByte += 1;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Stop if the response is malformed. */
|
||||||
|
if( pucByte < pucLastByte - 1 )
|
||||||
|
{
|
||||||
ucLength = pucByte[ 1 ];
|
ucLength = pucByte[ 1 ];
|
||||||
pucByte += 2;
|
pucByte += 2;
|
||||||
|
|
||||||
/* In most cases, a 4-byte network-endian parameter follows,
|
if( pucByte >= pucLastByte - ucLength )
|
||||||
just get it once here and use later */
|
{
|
||||||
memcpy( ( void * ) &( ulParameter ), ( void * ) pucByte, ( size_t ) sizeof( ulParameter ) );
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* In most cases, a 4-byte network-endian parameter follows,
|
||||||
|
just get it once here and use later. */
|
||||||
|
if( ucLength >= sizeof( ulParameter ) )
|
||||||
|
{
|
||||||
|
memcpy( ( void * ) &( ulParameter ),
|
||||||
|
( void * ) pucByte,
|
||||||
|
( size_t ) sizeof( ulParameter ) );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ulParameter = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Option-specific handling. */
|
||||||
switch( ucOptionCode )
|
switch( ucOptionCode )
|
||||||
{
|
{
|
||||||
case dhcpIPv4_MESSAGE_TYPE_OPTION_CODE :
|
case dhcpMESSAGE_TYPE_OPTION_CODE :
|
||||||
|
|
||||||
if( *pucByte == ( uint8_t ) xExpectedMessageType )
|
if( *pucByte == ( uint8_t ) xExpectedMessageType )
|
||||||
{
|
{
|
||||||
|
@ -691,7 +719,7 @@ const uint32_t ulMandatoryOptions = 2ul; /* DHCP server address, and the correct
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case dhcpIPv4_SUBNET_MASK_OPTION_CODE :
|
case dhcpSUBNET_MASK_OPTION_CODE :
|
||||||
|
|
||||||
if( ucLength == sizeof( uint32_t ) )
|
if( ucLength == sizeof( uint32_t ) )
|
||||||
{
|
{
|
||||||
|
@ -699,9 +727,9 @@ const uint32_t ulMandatoryOptions = 2ul; /* DHCP server address, and the correct
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case dhcpIPv4_GATEWAY_OPTION_CODE :
|
case dhcpGATEWAY_OPTION_CODE :
|
||||||
/* The DHCP server may send more than 1 gateway addresses. */
|
|
||||||
if( ucLength >= sizeof( uint32_t ) )
|
if( ucLength == sizeof( uint32_t ) )
|
||||||
{
|
{
|
||||||
/* ulProcessed is not incremented in this case
|
/* ulProcessed is not incremented in this case
|
||||||
because the gateway is not essential. */
|
because the gateway is not essential. */
|
||||||
|
@ -709,7 +737,7 @@ const uint32_t ulMandatoryOptions = 2ul; /* DHCP server address, and the correct
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case dhcpIPv4_DNS_SERVER_OPTIONS_CODE :
|
case dhcpDNS_SERVER_OPTIONS_CODE :
|
||||||
|
|
||||||
/* ulProcessed is not incremented in this case
|
/* ulProcessed is not incremented in this case
|
||||||
because the DNS server is not essential. Only the
|
because the DNS server is not essential. Only the
|
||||||
|
@ -717,7 +745,7 @@ const uint32_t ulMandatoryOptions = 2ul; /* DHCP server address, and the correct
|
||||||
xNetworkAddressing.ulDNSServerAddress = ulParameter;
|
xNetworkAddressing.ulDNSServerAddress = ulParameter;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case dhcpIPv4_SERVER_IP_ADDRESS_OPTION_CODE :
|
case dhcpSERVER_IP_ADDRESS_OPTION_CODE :
|
||||||
|
|
||||||
if( ucLength == sizeof( uint32_t ) )
|
if( ucLength == sizeof( uint32_t ) )
|
||||||
{
|
{
|
||||||
|
@ -738,7 +766,7 @@ const uint32_t ulMandatoryOptions = 2ul; /* DHCP server address, and the correct
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case dhcpIPv4_LEASE_TIME_OPTION_CODE :
|
case dhcpLEASE_TIME_OPTION_CODE :
|
||||||
|
|
||||||
if( ucLength == sizeof( xDHCPData.ulLeaseTime ) )
|
if( ucLength == sizeof( xDHCPData.ulLeaseTime ) )
|
||||||
{
|
{
|
||||||
|
@ -789,7 +817,7 @@ const uint32_t ulMandatoryOptions = 2ul; /* DHCP server address, and the correct
|
||||||
}
|
}
|
||||||
|
|
||||||
FreeRTOS_ReleaseUDPPayloadBuffer( ( void * ) pucUDPPayload );
|
FreeRTOS_ReleaseUDPPayloadBuffer( ( void * ) pucUDPPayload );
|
||||||
} /* if( lBytes > 0 ) */
|
}
|
||||||
|
|
||||||
return xReturn;
|
return xReturn;
|
||||||
}
|
}
|
||||||
|
@ -825,9 +853,6 @@ uint8_t *pucUDPPayloadBuffer;
|
||||||
pxDHCPMessage->ucOpcode = ( uint8_t ) xOpcode;
|
pxDHCPMessage->ucOpcode = ( uint8_t ) xOpcode;
|
||||||
pxDHCPMessage->ucAddressType = ( uint8_t ) dhcpADDRESS_TYPE_ETHERNET;
|
pxDHCPMessage->ucAddressType = ( uint8_t ) dhcpADDRESS_TYPE_ETHERNET;
|
||||||
pxDHCPMessage->ucAddressLength = ( uint8_t ) dhcpETHERNET_ADDRESS_LENGTH;
|
pxDHCPMessage->ucAddressLength = ( uint8_t ) dhcpETHERNET_ADDRESS_LENGTH;
|
||||||
|
|
||||||
/* ulTransactionID doesn't really need a htonl() translation, but when DHCP
|
|
||||||
times out, it is nicer to see an increasing number in this ID field */
|
|
||||||
pxDHCPMessage->ulTransactionID = FreeRTOS_htonl( xDHCPData.ulTransactionId );
|
pxDHCPMessage->ulTransactionID = FreeRTOS_htonl( xDHCPData.ulTransactionId );
|
||||||
pxDHCPMessage->ulDHCPCookie = ( uint32_t ) dhcpCOOKIE;
|
pxDHCPMessage->ulDHCPCookie = ( uint32_t ) dhcpCOOKIE;
|
||||||
if( xDHCPData.xUseBroadcast != pdFALSE )
|
if( xDHCPData.xUseBroadcast != pdFALSE )
|
||||||
|
@ -851,7 +876,7 @@ uint8_t *pucUDPPayloadBuffer;
|
||||||
|
|
||||||
/* Point to where the OPTION_END was stored to add data. */
|
/* Point to where the OPTION_END was stored to add data. */
|
||||||
pucPtr = &( pucUDPPayloadBuffer[ dhcpFIRST_OPTION_BYTE_OFFSET + ( *pxOptionsArraySize - 1 ) ] );
|
pucPtr = &( pucUDPPayloadBuffer[ dhcpFIRST_OPTION_BYTE_OFFSET + ( *pxOptionsArraySize - 1 ) ] );
|
||||||
pucPtr[ 0 ] = dhcpIPv4_DNS_HOSTNAME_OPTIONS_CODE;
|
pucPtr[ 0 ] = dhcpDNS_HOSTNAME_OPTIONS_CODE;
|
||||||
pucPtr[ 1 ] = ( uint8_t ) xNameLength;
|
pucPtr[ 1 ] = ( uint8_t ) xNameLength;
|
||||||
memcpy( ( void *) ( pucPtr + 2 ), pucHostName, xNameLength );
|
memcpy( ( void *) ( pucPtr + 2 ), pucHostName, xNameLength );
|
||||||
pucPtr[ 2 + xNameLength ] = dhcpOPTION_END_BYTE;
|
pucPtr[ 2 + xNameLength ] = dhcpOPTION_END_BYTE;
|
||||||
|
@ -880,15 +905,15 @@ static const uint8_t ucDHCPRequestOptions[] =
|
||||||
/* Do not change the ordering without also changing
|
/* Do not change the ordering without also changing
|
||||||
dhcpCLIENT_IDENTIFIER_OFFSET, dhcpREQUESTED_IP_ADDRESS_OFFSET and
|
dhcpCLIENT_IDENTIFIER_OFFSET, dhcpREQUESTED_IP_ADDRESS_OFFSET and
|
||||||
dhcpDHCP_SERVER_IP_ADDRESS_OFFSET. */
|
dhcpDHCP_SERVER_IP_ADDRESS_OFFSET. */
|
||||||
dhcpIPv4_MESSAGE_TYPE_OPTION_CODE, 1, dhcpMESSAGE_TYPE_REQUEST, /* Message type option. */
|
dhcpMESSAGE_TYPE_OPTION_CODE, 1, dhcpMESSAGE_TYPE_REQUEST, /* Message type option. */
|
||||||
dhcpIPv4_CLIENT_IDENTIFIER_OPTION_CODE, 6, 0, 0, 0, 0, 0, 0, /* Client identifier. */
|
dhcpCLIENT_IDENTIFIER_OPTION_CODE, 6, 0, 0, 0, 0, 0, 0, /* Client identifier. */
|
||||||
dhcpIPv4_REQUEST_IP_ADDRESS_OPTION_CODE, 4, 0, 0, 0, 0, /* The IP address being requested. */
|
dhcpREQUEST_IP_ADDRESS_OPTION_CODE, 4, 0, 0, 0, 0, /* The IP address being requested. */
|
||||||
dhcpIPv4_SERVER_IP_ADDRESS_OPTION_CODE, 4, 0, 0, 0, 0, /* The IP address of the DHCP server. */
|
dhcpSERVER_IP_ADDRESS_OPTION_CODE, 4, 0, 0, 0, 0, /* The IP address of the DHCP server. */
|
||||||
dhcpOPTION_END_BYTE
|
dhcpOPTION_END_BYTE
|
||||||
};
|
};
|
||||||
size_t xOptionsLength = sizeof( ucDHCPRequestOptions );
|
size_t xOptionsLength = sizeof( ucDHCPRequestOptions );
|
||||||
|
|
||||||
pucUDPPayloadBuffer = prvCreatePartDHCPMessage( &xAddress, ( uint8_t ) dhcpREQUEST_OPCODE, ucDHCPRequestOptions, &xOptionsLength );
|
pucUDPPayloadBuffer = prvCreatePartDHCPMessage( &xAddress, dhcpREQUEST_OPCODE, ucDHCPRequestOptions, &xOptionsLength );
|
||||||
|
|
||||||
/* Copy in the IP address being requested. */
|
/* Copy in the IP address being requested. */
|
||||||
memcpy( ( void * ) &( pucUDPPayloadBuffer[ dhcpFIRST_OPTION_BYTE_OFFSET + dhcpREQUESTED_IP_ADDRESS_OFFSET ] ),
|
memcpy( ( void * ) &( pucUDPPayloadBuffer[ dhcpFIRST_OPTION_BYTE_OFFSET + dhcpREQUESTED_IP_ADDRESS_OFFSET ] ),
|
||||||
|
@ -917,14 +942,14 @@ struct freertos_sockaddr xAddress;
|
||||||
static const uint8_t ucDHCPDiscoverOptions[] =
|
static const uint8_t ucDHCPDiscoverOptions[] =
|
||||||
{
|
{
|
||||||
/* Do not change the ordering without also changing dhcpCLIENT_IDENTIFIER_OFFSET. */
|
/* Do not change the ordering without also changing dhcpCLIENT_IDENTIFIER_OFFSET. */
|
||||||
dhcpIPv4_MESSAGE_TYPE_OPTION_CODE, 1, dhcpMESSAGE_TYPE_DISCOVER, /* Message type option. */
|
dhcpMESSAGE_TYPE_OPTION_CODE, 1, dhcpMESSAGE_TYPE_DISCOVER, /* Message type option. */
|
||||||
dhcpIPv4_CLIENT_IDENTIFIER_OPTION_CODE, 6, 0, 0, 0, 0, 0, 0, /* Client identifier. */
|
dhcpCLIENT_IDENTIFIER_OPTION_CODE, 6, 0, 0, 0, 0, 0, 0, /* Client identifier. */
|
||||||
dhcpIPv4_PARAMETER_REQUEST_OPTION_CODE, 3, dhcpIPv4_SUBNET_MASK_OPTION_CODE, dhcpIPv4_GATEWAY_OPTION_CODE, dhcpIPv4_DNS_SERVER_OPTIONS_CODE, /* Parameter request option. */
|
dhcpPARAMETER_REQUEST_OPTION_CODE, 3, dhcpSUBNET_MASK_OPTION_CODE, dhcpGATEWAY_OPTION_CODE, dhcpDNS_SERVER_OPTIONS_CODE, /* Parameter request option. */
|
||||||
dhcpOPTION_END_BYTE
|
dhcpOPTION_END_BYTE
|
||||||
};
|
};
|
||||||
size_t xOptionsLength = sizeof( ucDHCPDiscoverOptions );
|
size_t xOptionsLength = sizeof( ucDHCPDiscoverOptions );
|
||||||
|
|
||||||
pucUDPPayloadBuffer = prvCreatePartDHCPMessage( &xAddress, ( uint8_t ) dhcpREQUEST_OPCODE, ucDHCPDiscoverOptions, &xOptionsLength );
|
pucUDPPayloadBuffer = prvCreatePartDHCPMessage( &xAddress, dhcpREQUEST_OPCODE, ucDHCPDiscoverOptions, &xOptionsLength );
|
||||||
|
|
||||||
FreeRTOS_debug_printf( ( "vDHCPProcess: discover\n" ) );
|
FreeRTOS_debug_printf( ( "vDHCPProcess: discover\n" ) );
|
||||||
iptraceSENDING_DHCP_DISCOVER();
|
iptraceSENDING_DHCP_DISCOVER();
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* FreeRTOS+TCP V2.0.3
|
* FreeRTOS+TCP V2.0.7
|
||||||
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
@ -47,17 +47,17 @@
|
||||||
#if( ipconfigUSE_DNS != 0 )
|
#if( ipconfigUSE_DNS != 0 )
|
||||||
|
|
||||||
#if( ipconfigBYTE_ORDER == pdFREERTOS_LITTLE_ENDIAN )
|
#if( ipconfigBYTE_ORDER == pdFREERTOS_LITTLE_ENDIAN )
|
||||||
#define dnsDNS_PORT 0x3500u
|
#define dnsDNS_PORT 0x3500
|
||||||
#define dnsONE_QUESTION 0x0100u
|
#define dnsONE_QUESTION 0x0100
|
||||||
#define dnsOUTGOING_FLAGS 0x0001u /* Standard query. */
|
#define dnsOUTGOING_FLAGS 0x0001 /* Standard query. */
|
||||||
#define dnsRX_FLAGS_MASK 0x0f80u /* The bits of interest in the flags field of incoming DNS messages. */
|
#define dnsRX_FLAGS_MASK 0x0f80 /* The bits of interest in the flags field of incoming DNS messages. */
|
||||||
#define dnsEXPECTED_RX_FLAGS 0x0080u /* Should be a response, without any errors. */
|
#define dnsEXPECTED_RX_FLAGS 0x0080 /* Should be a response, without any errors. */
|
||||||
#else
|
#else
|
||||||
#define dnsDNS_PORT 0x0035u
|
#define dnsDNS_PORT 0x0035
|
||||||
#define dnsONE_QUESTION 0x0001u
|
#define dnsONE_QUESTION 0x0001
|
||||||
#define dnsOUTGOING_FLAGS 0x0100u /* Standard query. */
|
#define dnsOUTGOING_FLAGS 0x0100 /* Standard query. */
|
||||||
#define dnsRX_FLAGS_MASK 0x800fu /* The bits of interest in the flags field of incoming DNS messages. */
|
#define dnsRX_FLAGS_MASK 0x800f /* The bits of interest in the flags field of incoming DNS messages. */
|
||||||
#define dnsEXPECTED_RX_FLAGS 0x8000u /* Should be a response, without any errors. */
|
#define dnsEXPECTED_RX_FLAGS 0x8000 /* Should be a response, without any errors. */
|
||||||
|
|
||||||
#endif /* ipconfigBYTE_ORDER */
|
#endif /* ipconfigBYTE_ORDER */
|
||||||
|
|
||||||
|
@ -72,29 +72,33 @@ name field is an offset to the string, rather than the string itself. */
|
||||||
#define dnsNAME_IS_OFFSET ( ( uint8_t ) 0xc0 )
|
#define dnsNAME_IS_OFFSET ( ( uint8_t ) 0xc0 )
|
||||||
|
|
||||||
/* NBNS flags. */
|
/* NBNS flags. */
|
||||||
#define dnsNBNS_FLAGS_RESPONSE 0x8000u
|
#define dnsNBNS_FLAGS_RESPONSE 0x8000
|
||||||
#define dnsNBNS_FLAGS_OPCODE_MASK 0x7800u
|
#define dnsNBNS_FLAGS_OPCODE_MASK 0x7800
|
||||||
#define dnsNBNS_FLAGS_OPCODE_QUERY 0x0000u
|
#define dnsNBNS_FLAGS_OPCODE_QUERY 0x0000
|
||||||
#define dnsNBNS_FLAGS_OPCODE_REGISTRATION 0x2800u
|
#define dnsNBNS_FLAGS_OPCODE_REGISTRATION 0x2800
|
||||||
|
|
||||||
/* Host types. */
|
/* Host types. */
|
||||||
#define dnsTYPE_A_HOST 0x0001u
|
#define dnsTYPE_A_HOST 0x01
|
||||||
#define dnsCLASS_IN 0x0001u
|
#define dnsCLASS_IN 0x01
|
||||||
|
|
||||||
/* LLMNR constants. */
|
/* LLMNR constants. */
|
||||||
#define dnsLLMNR_TTL_VALUE 300000u
|
#define dnsLLMNR_TTL_VALUE 300000
|
||||||
#define dnsLLMNR_FLAGS_IS_REPONSE 0x8000u
|
#define dnsLLMNR_FLAGS_IS_REPONSE 0x8000
|
||||||
|
|
||||||
/* NBNS constants. */
|
/* NBNS constants. */
|
||||||
#define dnsNBNS_TTL_VALUE 3600u /* 1 hour valid */
|
#define dnsNBNS_TTL_VALUE 3600 /* 1 hour valid */
|
||||||
#define dnsNBNS_TYPE_NET_BIOS 0x0020u
|
#define dnsNBNS_TYPE_NET_BIOS 0x0020
|
||||||
#define dnsNBNS_CLASS_IN 0x0001u
|
#define dnsNBNS_CLASS_IN 0x01
|
||||||
#define dnsNBNS_NAME_FLAGS 0x6000u
|
#define dnsNBNS_NAME_FLAGS 0x6000
|
||||||
#define dnsNBNS_ENCODED_NAME_LENGTH 32
|
#define dnsNBNS_ENCODED_NAME_LENGTH 32
|
||||||
|
|
||||||
/* If the queried NBNS name matches with the device's name,
|
/* If the queried NBNS name matches with the device's name,
|
||||||
the query will be responded to with these flags: */
|
the query will be responded to with these flags: */
|
||||||
#define dnsNBNS_QUERY_RESPONSE_FLAGS 0x8500u
|
#define dnsNBNS_QUERY_RESPONSE_FLAGS ( 0x8500 )
|
||||||
|
|
||||||
|
/* Flag DNS parsing errors in situations where an IPv4 address is the return
|
||||||
|
type. */
|
||||||
|
#define dnsPARSE_ERROR 0UL
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Create a socket and bind it to the standard DNS port number. Return the
|
* Create a socket and bind it to the standard DNS port number. Return the
|
||||||
|
@ -110,12 +114,12 @@ static size_t prvCreateDNSMessage( uint8_t *pucUDPPayloadBuffer, const char *pcH
|
||||||
/*
|
/*
|
||||||
* Simple routine that jumps over the NAME field of a resource record.
|
* Simple routine that jumps over the NAME field of a resource record.
|
||||||
*/
|
*/
|
||||||
static uint8_t *prvSkipNameField( uint8_t *pucByte );
|
static uint8_t *prvSkipNameField( uint8_t *pucByte, size_t xSourceLen );
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Process a response packet from a DNS server.
|
* Process a response packet from a DNS server.
|
||||||
*/
|
*/
|
||||||
static uint32_t prvParseDNSReply( uint8_t *pucUDPPayloadBuffer, TickType_t xIdentifier );
|
static uint32_t prvParseDNSReply( uint8_t *pucUDPPayloadBuffer, size_t xBufferLength, TickType_t xIdentifier );
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Prepare and send a message to a DNS server. 'xReadTimeOut_ms' will be passed as
|
* Prepare and send a message to a DNS server. 'xReadTimeOut_ms' will be passed as
|
||||||
|
@ -131,18 +135,19 @@ static uint32_t prvGetHostByName( const char *pcHostName, TickType_t xIdentifier
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if( ipconfigUSE_NBNS == 1 )
|
#if( ipconfigUSE_NBNS == 1 )
|
||||||
static portINLINE void prvTreatNBNS( uint8_t *pucUDPPayloadBuffer, uint32_t ulIPAddress );
|
static portINLINE void prvTreatNBNS( uint8_t *pucUDPPayloadBuffer, size_t xBufferLength, uint32_t ulIPAddress );
|
||||||
#endif /* ipconfigUSE_NBNS */
|
#endif /* ipconfigUSE_NBNS */
|
||||||
|
|
||||||
#if( ipconfigUSE_DNS_CACHE == 1 )
|
#if( ipconfigUSE_DNS_CACHE == 1 )
|
||||||
static uint8_t *prvReadNameField( uint8_t *pucByte, char *pcName, BaseType_t xLen );
|
static uint8_t *prvReadNameField( uint8_t *pucByte, size_t xSourceLen, char *pcName, size_t xLen );
|
||||||
static void prvProcessDNSCache( const char *pcName, uint32_t *pulIP, BaseType_t xLookUp );
|
static void prvProcessDNSCache( const char *pcName, uint32_t *pulIP, uint32_t ulTTL, BaseType_t xLookUp );
|
||||||
|
|
||||||
typedef struct xDNS_CACHE_TABLE_ROW
|
typedef struct xDNS_CACHE_TABLE_ROW
|
||||||
{
|
{
|
||||||
uint32_t ulIPAddress; /* The IP address of an ARP cache entry. */
|
uint32_t ulIPAddress; /* The IP address of an ARP cache entry. */
|
||||||
char pcName[ipconfigDNS_CACHE_NAME_LENGTH]; /* The name of the host */
|
char pcName[ ipconfigDNS_CACHE_NAME_LENGTH ]; /* The name of the host */
|
||||||
uint8_t ucAge; /* A value that is periodically decremented but can also be refreshed by active communication. The ARP cache entry is removed if the value reaches zero. */
|
uint32_t ulTTL; /* Time-to-Live (in seconds) from the DNS server. */
|
||||||
|
uint32_t ulTimeWhenAddedInSeconds;
|
||||||
} DNSCacheRow_t;
|
} DNSCacheRow_t;
|
||||||
|
|
||||||
static DNSCacheRow_t xDNSCache[ ipconfigDNS_CACHE_ENTRIES ];
|
static DNSCacheRow_t xDNSCache[ ipconfigDNS_CACHE_ENTRIES ];
|
||||||
|
@ -180,6 +185,18 @@ struct xDNSTail
|
||||||
#include "pack_struct_end.h"
|
#include "pack_struct_end.h"
|
||||||
typedef struct xDNSTail DNSTail_t;
|
typedef struct xDNSTail DNSTail_t;
|
||||||
|
|
||||||
|
/* DNS answer record header. */
|
||||||
|
#include "pack_struct_start.h"
|
||||||
|
struct xDNSAnswerRecord
|
||||||
|
{
|
||||||
|
uint16_t usType;
|
||||||
|
uint16_t usClass;
|
||||||
|
uint32_t ulTTL;
|
||||||
|
uint16_t usDataLength;
|
||||||
|
}
|
||||||
|
#include "pack_struct_end.h"
|
||||||
|
typedef struct xDNSAnswerRecord DNSAnswerRecord_t;
|
||||||
|
|
||||||
#if( ipconfigUSE_LLMNR == 1 )
|
#if( ipconfigUSE_LLMNR == 1 )
|
||||||
|
|
||||||
#include "pack_struct_start.h"
|
#include "pack_struct_start.h"
|
||||||
|
@ -239,7 +256,7 @@ typedef struct xDNSTail DNSTail_t;
|
||||||
uint32_t FreeRTOS_dnslookup( const char *pcHostName )
|
uint32_t FreeRTOS_dnslookup( const char *pcHostName )
|
||||||
{
|
{
|
||||||
uint32_t ulIPAddress = 0UL;
|
uint32_t ulIPAddress = 0UL;
|
||||||
prvProcessDNSCache( pcHostName, &ulIPAddress, pdTRUE );
|
prvProcessDNSCache( pcHostName, &ulIPAddress, 0, pdTRUE );
|
||||||
return ulIPAddress;
|
return ulIPAddress;
|
||||||
}
|
}
|
||||||
#endif /* ipconfigUSE_DNS_CACHE == 1 */
|
#endif /* ipconfigUSE_DNS_CACHE == 1 */
|
||||||
|
@ -396,11 +413,8 @@ uint32_t FreeRTOS_gethostbyname_a( const char *pcHostName, FOnDNSEvent pCallback
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
uint32_t ulIPAddress = 0UL;
|
uint32_t ulIPAddress = 0UL;
|
||||||
static uint16_t usIdentifier = 0u;
|
TickType_t xReadTimeOut_ms = ipconfigSOCK_DEFAULT_RECEIVE_BLOCK_TIME;
|
||||||
TickType_t xReadTimeOut_ms = 1200U;
|
TickType_t xIdentifier = 0;
|
||||||
/* Generate a unique identifier for this query. Keep it in a local variable
|
|
||||||
as gethostbyname() may be called from different threads */
|
|
||||||
TickType_t xIdentifier = ( TickType_t )usIdentifier++;
|
|
||||||
|
|
||||||
/* If the supplied hostname is IP address, convert it to uint32_t
|
/* If the supplied hostname is IP address, convert it to uint32_t
|
||||||
and return. */
|
and return. */
|
||||||
|
@ -429,6 +443,12 @@ TickType_t xIdentifier = ( TickType_t )usIdentifier++;
|
||||||
}
|
}
|
||||||
#endif /* ipconfigUSE_DNS_CACHE == 1 */
|
#endif /* ipconfigUSE_DNS_CACHE == 1 */
|
||||||
|
|
||||||
|
/* Generate a unique identifier. */
|
||||||
|
if( 0 == ulIPAddress )
|
||||||
|
{
|
||||||
|
xIdentifier = ( TickType_t )ipconfigRAND32( );
|
||||||
|
}
|
||||||
|
|
||||||
#if( ipconfigDNS_USE_CALLBACKS != 0 )
|
#if( ipconfigDNS_USE_CALLBACKS != 0 )
|
||||||
{
|
{
|
||||||
if( pCallback != NULL )
|
if( pCallback != NULL )
|
||||||
|
@ -436,8 +456,11 @@ TickType_t xIdentifier = ( TickType_t )usIdentifier++;
|
||||||
if( ulIPAddress == 0UL )
|
if( ulIPAddress == 0UL )
|
||||||
{
|
{
|
||||||
/* The user has provided a callback function, so do not block on recvfrom() */
|
/* The user has provided a callback function, so do not block on recvfrom() */
|
||||||
|
if( 0 != xIdentifier )
|
||||||
|
{
|
||||||
xReadTimeOut_ms = 0;
|
xReadTimeOut_ms = 0;
|
||||||
vDNSSetCallBack( pcHostName, pvSearchID, pCallback, xTimeout, ( TickType_t ) xIdentifier );
|
vDNSSetCallBack( pcHostName, pvSearchID, pCallback, xTimeout, ( TickType_t )xIdentifier );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -448,7 +471,7 @@ TickType_t xIdentifier = ( TickType_t )usIdentifier++;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if( ulIPAddress == 0UL)
|
if( ulIPAddress == 0UL && 0 != xIdentifier )
|
||||||
{
|
{
|
||||||
ulIPAddress = prvGetHostByName( pcHostName, xIdentifier, xReadTimeOut_ms );
|
ulIPAddress = prvGetHostByName( pcHostName, xIdentifier, xReadTimeOut_ms );
|
||||||
}
|
}
|
||||||
|
@ -467,7 +490,7 @@ uint32_t ulAddressLength = sizeof( struct freertos_sockaddr );
|
||||||
BaseType_t xAttempt;
|
BaseType_t xAttempt;
|
||||||
int32_t lBytes;
|
int32_t lBytes;
|
||||||
size_t xPayloadLength, xExpectedPayloadLength;
|
size_t xPayloadLength, xExpectedPayloadLength;
|
||||||
TickType_t xWriteTimeOut_ms = 100U;
|
TickType_t xWriteTimeOut_ms = ipconfigSOCK_DEFAULT_SEND_BLOCK_TIME;
|
||||||
|
|
||||||
#if( ipconfigUSE_LLMNR == 1 )
|
#if( ipconfigUSE_LLMNR == 1 )
|
||||||
BaseType_t bHasDot = pdFALSE;
|
BaseType_t bHasDot = pdFALSE;
|
||||||
|
@ -544,7 +567,7 @@ TickType_t xWriteTimeOut_ms = 100U;
|
||||||
if( lBytes > 0 )
|
if( lBytes > 0 )
|
||||||
{
|
{
|
||||||
/* The reply was received. Process it. */
|
/* The reply was received. Process it. */
|
||||||
ulIPAddress = prvParseDNSReply( pucUDPPayloadBuffer, xIdentifier );
|
ulIPAddress = prvParseDNSReply( pucUDPPayloadBuffer, lBytes, xIdentifier );
|
||||||
|
|
||||||
/* Finished with the buffer. The zero copy interface
|
/* Finished with the buffer. The zero copy interface
|
||||||
is being used, so the buffer must be freed by the
|
is being used, so the buffer must be freed by the
|
||||||
|
@ -649,33 +672,74 @@ static const DNSMessage_t xDefaultPartDNSHeader =
|
||||||
|
|
||||||
#if( ipconfigUSE_DNS_CACHE == 1 )
|
#if( ipconfigUSE_DNS_CACHE == 1 )
|
||||||
|
|
||||||
static uint8_t *prvReadNameField( uint8_t *pucByte, char *pcName, BaseType_t xLen )
|
static uint8_t *prvReadNameField( uint8_t *pucByte, size_t xSourceLen, char *pcName, size_t xDestLen )
|
||||||
{
|
{
|
||||||
BaseType_t xNameLen = 0;
|
size_t xNameLen = 0;
|
||||||
|
BaseType_t xCount;
|
||||||
|
|
||||||
|
if( 0 == xSourceLen )
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/* Determine if the name is the fully coded name, or an offset to the name
|
/* Determine if the name is the fully coded name, or an offset to the name
|
||||||
elsewhere in the message. */
|
elsewhere in the message. */
|
||||||
if( ( *pucByte & dnsNAME_IS_OFFSET ) == dnsNAME_IS_OFFSET )
|
if( ( *pucByte & dnsNAME_IS_OFFSET ) == dnsNAME_IS_OFFSET )
|
||||||
{
|
{
|
||||||
/* Jump over the two byte offset. */
|
/* Jump over the two byte offset. */
|
||||||
|
if( xSourceLen > sizeof( uint16_t ) )
|
||||||
|
{
|
||||||
pucByte += sizeof( uint16_t );
|
pucByte += sizeof( uint16_t );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pucByte = NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* pucByte points to the full name. Walk over the string. */
|
/* pucByte points to the full name. Walk over the string. */
|
||||||
while( *pucByte != 0x00 )
|
while( NULL != pucByte && *pucByte != 0x00 && xSourceLen > 1 )
|
||||||
{
|
{
|
||||||
BaseType_t xCount;
|
/* If this is not the first time through the loop, then add a
|
||||||
if( xNameLen && xNameLen < xLen - 1 )
|
separator in the output. */
|
||||||
pcName[xNameLen++] = '.';
|
if( xNameLen > 0 && xNameLen < xDestLen - 1 )
|
||||||
for( xCount = *(pucByte++); xCount--; pucByte++ )
|
|
||||||
{
|
{
|
||||||
if( xNameLen < xLen - 1 )
|
pcName[ xNameLen++ ] = '.';
|
||||||
pcName[xNameLen++] = *( ( char * ) pucByte );
|
}
|
||||||
|
|
||||||
|
/* Process the first/next sub-string. */
|
||||||
|
for( xCount = *(pucByte++), xSourceLen--;
|
||||||
|
xCount-- && xSourceLen > 1;
|
||||||
|
pucByte++, xSourceLen-- )
|
||||||
|
{
|
||||||
|
if( xNameLen < xDestLen - 1 )
|
||||||
|
{
|
||||||
|
pcName[ xNameLen++ ] = *( ( char * )pucByte );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* DNS name is too big for the provided buffer. */
|
||||||
|
pucByte = NULL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Confirm that a fully formed name was found. */
|
||||||
|
if( NULL != pucByte )
|
||||||
|
{
|
||||||
|
if( 0x00 == *pucByte )
|
||||||
|
{
|
||||||
pucByte++;
|
pucByte++;
|
||||||
|
xSourceLen--;
|
||||||
|
pcName[ xNameLen++ ] = '\0';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pucByte = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return pucByte;
|
return pucByte;
|
||||||
|
@ -683,28 +747,61 @@ static const DNSMessage_t xDefaultPartDNSHeader =
|
||||||
#endif /* ipconfigUSE_DNS_CACHE == 1 */
|
#endif /* ipconfigUSE_DNS_CACHE == 1 */
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
static uint8_t *prvSkipNameField( uint8_t *pucByte )
|
static uint8_t *prvSkipNameField( uint8_t *pucByte, size_t xSourceLen )
|
||||||
{
|
{
|
||||||
|
size_t xChunkLength;
|
||||||
|
|
||||||
|
if( 0 == xSourceLen )
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/* Determine if the name is the fully coded name, or an offset to the name
|
/* Determine if the name is the fully coded name, or an offset to the name
|
||||||
elsewhere in the message. */
|
elsewhere in the message. */
|
||||||
if( ( *pucByte & dnsNAME_IS_OFFSET ) == dnsNAME_IS_OFFSET )
|
if( ( *pucByte & dnsNAME_IS_OFFSET ) == dnsNAME_IS_OFFSET )
|
||||||
{
|
{
|
||||||
/* Jump over the two byte offset. */
|
/* Jump over the two byte offset. */
|
||||||
|
if( xSourceLen > sizeof( uint16_t ) )
|
||||||
|
{
|
||||||
pucByte += sizeof( uint16_t );
|
pucByte += sizeof( uint16_t );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pucByte = NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* pucByte points to the full name. Walk over the string. */
|
/* pucByte points to the full name. Walk over the string. */
|
||||||
while( *pucByte != 0x00 )
|
while( *pucByte != 0x00 && xSourceLen > 1 )
|
||||||
{
|
{
|
||||||
/* The number of bytes to jump for each name section is stored in the byte
|
xChunkLength = *pucByte + 1;
|
||||||
before the name section. */
|
|
||||||
pucByte += ( *pucByte + 1 );
|
if( xSourceLen > xChunkLength )
|
||||||
|
{
|
||||||
|
xSourceLen -= xChunkLength;
|
||||||
|
pucByte += xChunkLength;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pucByte = NULL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Confirm that a fully formed name was found. */
|
||||||
|
if( NULL != pucByte )
|
||||||
|
{
|
||||||
|
if( 0x00 == *pucByte )
|
||||||
|
{
|
||||||
pucByte++;
|
pucByte++;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pucByte = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return pucByte;
|
return pucByte;
|
||||||
}
|
}
|
||||||
|
@ -712,10 +809,25 @@ static uint8_t *prvSkipNameField( uint8_t *pucByte )
|
||||||
|
|
||||||
uint32_t ulDNSHandlePacket( NetworkBufferDescriptor_t *pxNetworkBuffer )
|
uint32_t ulDNSHandlePacket( NetworkBufferDescriptor_t *pxNetworkBuffer )
|
||||||
{
|
{
|
||||||
uint8_t *pucUDPPayloadBuffer = pxNetworkBuffer->pucEthernetBuffer + sizeof( UDPPacket_t );
|
uint8_t *pucUDPPayloadBuffer;
|
||||||
DNSMessage_t *pxDNSMessageHeader = ( DNSMessage_t * ) pucUDPPayloadBuffer;
|
size_t xPlayloadBufferLength;
|
||||||
|
DNSMessage_t *pxDNSMessageHeader;
|
||||||
|
|
||||||
prvParseDNSReply( pucUDPPayloadBuffer, ( uint32_t ) pxDNSMessageHeader->usIdentifier );
|
xPlayloadBufferLength = pxNetworkBuffer->xDataLength - sizeof( UDPPacket_t );
|
||||||
|
if ( xPlayloadBufferLength < sizeof( DNSMessage_t ) )
|
||||||
|
{
|
||||||
|
return pdFAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
pucUDPPayloadBuffer = pxNetworkBuffer->pucEthernetBuffer + sizeof( UDPPacket_t );
|
||||||
|
pxDNSMessageHeader = ( DNSMessage_t * ) pucUDPPayloadBuffer;
|
||||||
|
|
||||||
|
if( pxNetworkBuffer->xDataLength > sizeof( UDPPacket_t ) )
|
||||||
|
{
|
||||||
|
prvParseDNSReply( pucUDPPayloadBuffer,
|
||||||
|
xPlayloadBufferLength,
|
||||||
|
( uint32_t )pxDNSMessageHeader->usIdentifier );
|
||||||
|
}
|
||||||
|
|
||||||
/* The packet was not consumed. */
|
/* The packet was not consumed. */
|
||||||
return pdFAIL;
|
return pdFAIL;
|
||||||
|
@ -727,9 +839,14 @@ DNSMessage_t *pxDNSMessageHeader = ( DNSMessage_t * ) pucUDPPayloadBuffer;
|
||||||
uint32_t ulNBNSHandlePacket (NetworkBufferDescriptor_t *pxNetworkBuffer )
|
uint32_t ulNBNSHandlePacket (NetworkBufferDescriptor_t *pxNetworkBuffer )
|
||||||
{
|
{
|
||||||
UDPPacket_t *pxUDPPacket = ( UDPPacket_t * ) pxNetworkBuffer->pucEthernetBuffer;
|
UDPPacket_t *pxUDPPacket = ( UDPPacket_t * ) pxNetworkBuffer->pucEthernetBuffer;
|
||||||
uint8_t *pucUDPPayloadBuffer = pxNetworkBuffer->pucEthernetBuffer + sizeof( *pxUDPPacket );
|
uint8_t *pucUDPPayloadBuffer = pxNetworkBuffer->pucEthernetBuffer + sizeof( UDPPacket_t );
|
||||||
|
|
||||||
prvTreatNBNS( pucUDPPayloadBuffer, pxUDPPacket->xIPHeader.ulSourceIPAddress );
|
if( pxNetworkBuffer->xDataLength > sizeof( UDPPacket_t) )
|
||||||
|
{
|
||||||
|
prvTreatNBNS( pucUDPPayloadBuffer,
|
||||||
|
pxNetworkBuffer->xDataLength - sizeof( UDPPacket_t ),
|
||||||
|
pxUDPPacket->xIPHeader.ulSourceIPAddress );
|
||||||
|
}
|
||||||
|
|
||||||
/* The packet was not consumed. */
|
/* The packet was not consumed. */
|
||||||
return pdFAIL;
|
return pdFAIL;
|
||||||
|
@ -738,28 +855,42 @@ DNSMessage_t *pxDNSMessageHeader = ( DNSMessage_t * ) pucUDPPayloadBuffer;
|
||||||
#endif /* ipconfigUSE_NBNS */
|
#endif /* ipconfigUSE_NBNS */
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
static uint32_t prvParseDNSReply( uint8_t *pucUDPPayloadBuffer, TickType_t xIdentifier )
|
static uint32_t prvParseDNSReply( uint8_t *pucUDPPayloadBuffer, size_t xBufferLength, TickType_t xIdentifier )
|
||||||
{
|
{
|
||||||
DNSMessage_t *pxDNSMessageHeader;
|
DNSMessage_t *pxDNSMessageHeader;
|
||||||
|
DNSAnswerRecord_t *pxDNSAnswerRecord;
|
||||||
uint32_t ulIPAddress = 0UL;
|
uint32_t ulIPAddress = 0UL;
|
||||||
#if( ipconfigUSE_LLMNR == 1 )
|
#if( ipconfigUSE_LLMNR == 1 )
|
||||||
char *pcRequestedName = NULL;
|
char *pcRequestedName = NULL;
|
||||||
#endif
|
#endif
|
||||||
uint8_t *pucByte;
|
uint8_t *pucByte;
|
||||||
|
size_t xSourceBytesRemaining;
|
||||||
uint16_t x, usDataLength, usQuestions;
|
uint16_t x, usDataLength, usQuestions;
|
||||||
#if( ipconfigUSE_LLMNR == 1 )
|
#if( ipconfigUSE_LLMNR == 1 )
|
||||||
uint16_t usType = 0, usClass = 0;
|
uint16_t usType = 0, usClass = 0;
|
||||||
#endif
|
#endif
|
||||||
#if( ipconfigUSE_DNS_CACHE == 1 )
|
#if( ipconfigUSE_DNS_CACHE == 1 )
|
||||||
char pcName[128] = ""; /*_RB_ What is the significance of 128? Probably too big to go on the stack for a small MCU but don't know how else it could be made re-entrant. Might be necessary. */
|
char pcName[ ipconfigDNS_CACHE_NAME_LENGTH ] = "";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Ensure that the buffer is of at least minimal DNS message length. */
|
||||||
|
if( xBufferLength < sizeof( DNSMessage_t ) )
|
||||||
|
{
|
||||||
|
return dnsPARSE_ERROR;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
xSourceBytesRemaining = xBufferLength;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Parse the DNS message header. */
|
||||||
pxDNSMessageHeader = ( DNSMessage_t * ) pucUDPPayloadBuffer;
|
pxDNSMessageHeader = ( DNSMessage_t * ) pucUDPPayloadBuffer;
|
||||||
|
|
||||||
if( pxDNSMessageHeader->usIdentifier == ( uint16_t ) xIdentifier )
|
if( pxDNSMessageHeader->usIdentifier == ( uint16_t ) xIdentifier )
|
||||||
{
|
{
|
||||||
/* Start at the first byte after the header. */
|
/* Start at the first byte after the header. */
|
||||||
pucByte = pucUDPPayloadBuffer + sizeof( DNSMessage_t );
|
pucByte = pucUDPPayloadBuffer + sizeof( DNSMessage_t );
|
||||||
|
xSourceBytesRemaining -= sizeof( DNSMessage_t );
|
||||||
|
|
||||||
/* Skip any question records. */
|
/* Skip any question records. */
|
||||||
usQuestions = FreeRTOS_ntohs( pxDNSMessageHeader->usQuestions );
|
usQuestions = FreeRTOS_ntohs( pxDNSMessageHeader->usQuestions );
|
||||||
|
@ -777,18 +908,45 @@ uint16_t x, usDataLength, usQuestions;
|
||||||
#if( ipconfigUSE_DNS_CACHE == 1 )
|
#if( ipconfigUSE_DNS_CACHE == 1 )
|
||||||
if( x == 0 )
|
if( x == 0 )
|
||||||
{
|
{
|
||||||
pucByte = prvReadNameField( pucByte, pcName, sizeof( pcName ) );
|
pucByte = prvReadNameField( pucByte,
|
||||||
|
xSourceBytesRemaining,
|
||||||
|
pcName,
|
||||||
|
sizeof( pcName ) );
|
||||||
|
|
||||||
|
/* Check for a malformed response. */
|
||||||
|
if( NULL == pucByte )
|
||||||
|
{
|
||||||
|
return dnsPARSE_ERROR;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
xSourceBytesRemaining = ( pucUDPPayloadBuffer + xBufferLength ) - pucByte;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif /* ipconfigUSE_DNS_CACHE */
|
#endif /* ipconfigUSE_DNS_CACHE */
|
||||||
{
|
{
|
||||||
/* Skip the variable length pcName field. */
|
/* Skip the variable length pcName field. */
|
||||||
pucByte = prvSkipNameField( pucByte );
|
pucByte = prvSkipNameField( pucByte,
|
||||||
|
xSourceBytesRemaining );
|
||||||
|
|
||||||
|
/* Check for a malformed response. */
|
||||||
|
if( NULL == pucByte )
|
||||||
|
{
|
||||||
|
return dnsPARSE_ERROR;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
xSourceBytesRemaining = pucUDPPayloadBuffer + xBufferLength - pucByte;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Check the remaining buffer size. */
|
||||||
|
if( xSourceBytesRemaining >= sizeof( uint32_t ) )
|
||||||
|
{
|
||||||
#if( ipconfigUSE_LLMNR == 1 )
|
#if( ipconfigUSE_LLMNR == 1 )
|
||||||
{
|
{
|
||||||
/* usChar2u16 returns value in host endianness. */
|
/* usChar2u16 returns value in host endianness */
|
||||||
usType = usChar2u16( pucByte );
|
usType = usChar2u16( pucByte );
|
||||||
usClass = usChar2u16( pucByte + 2 );
|
usClass = usChar2u16( pucByte + 2 );
|
||||||
}
|
}
|
||||||
|
@ -796,37 +954,54 @@ uint16_t x, usDataLength, usQuestions;
|
||||||
|
|
||||||
/* Skip the type and class fields. */
|
/* Skip the type and class fields. */
|
||||||
pucByte += sizeof( uint32_t );
|
pucByte += sizeof( uint32_t );
|
||||||
|
xSourceBytesRemaining -= sizeof( uint32_t );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Malformed response. */
|
||||||
|
return dnsPARSE_ERROR;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Search through the answers records. */
|
/* Search through the answer records. */
|
||||||
pxDNSMessageHeader->usAnswers = FreeRTOS_ntohs( pxDNSMessageHeader->usAnswers );
|
pxDNSMessageHeader->usAnswers = FreeRTOS_ntohs( pxDNSMessageHeader->usAnswers );
|
||||||
|
|
||||||
if( ( pxDNSMessageHeader->usFlags & dnsRX_FLAGS_MASK ) == dnsEXPECTED_RX_FLAGS )
|
if( ( pxDNSMessageHeader->usFlags & dnsRX_FLAGS_MASK ) == dnsEXPECTED_RX_FLAGS )
|
||||||
{
|
{
|
||||||
for( x = 0; x < pxDNSMessageHeader->usAnswers; x++ )
|
for( x = 0; x < pxDNSMessageHeader->usAnswers; x++ )
|
||||||
{
|
{
|
||||||
pucByte = prvSkipNameField( pucByte );
|
pucByte = prvSkipNameField( pucByte,
|
||||||
|
xSourceBytesRemaining );
|
||||||
|
|
||||||
/* Is the type field that of an A record? */
|
/* Check for a malformed response. */
|
||||||
if( usChar2u16( pucByte ) == dnsTYPE_A_HOST )
|
if( NULL == pucByte )
|
||||||
{
|
{
|
||||||
/* This is the required record. Skip the type, class, and
|
return dnsPARSE_ERROR;
|
||||||
time to live fields, plus the first byte of the data
|
}
|
||||||
length. */
|
else
|
||||||
pucByte += ( sizeof( uint32_t ) + sizeof( uint32_t ) + sizeof( uint8_t ) );
|
|
||||||
|
|
||||||
/* Sanity check the data length. */
|
|
||||||
if( ( size_t ) *pucByte == sizeof( uint32_t ) )
|
|
||||||
{
|
{
|
||||||
/* Skip the second byte of the length. */
|
xSourceBytesRemaining = pucUDPPayloadBuffer + xBufferLength - pucByte;
|
||||||
pucByte++;
|
}
|
||||||
|
|
||||||
|
/* Is there enough data for an IPv4 A record answer and, if so,
|
||||||
|
is this an A record? */
|
||||||
|
if( xSourceBytesRemaining >= sizeof( DNSAnswerRecord_t ) + sizeof( uint32_t ) &&
|
||||||
|
usChar2u16( pucByte ) == dnsTYPE_A_HOST )
|
||||||
|
{
|
||||||
|
/* This is the required record type and is of sufficient size. */
|
||||||
|
pxDNSAnswerRecord = ( DNSAnswerRecord_t * )pucByte;
|
||||||
|
|
||||||
|
/* Sanity check the data length of an IPv4 answer. */
|
||||||
|
if( FreeRTOS_ntohs( pxDNSAnswerRecord->usDataLength ) == sizeof( uint32_t ) )
|
||||||
|
{
|
||||||
/* Copy the IP address out of the record. */
|
/* Copy the IP address out of the record. */
|
||||||
memcpy( ( void * ) &ulIPAddress, ( void * ) pucByte, sizeof( uint32_t ) );
|
memcpy( &ulIPAddress,
|
||||||
|
pucByte + sizeof( DNSAnswerRecord_t ),
|
||||||
|
sizeof( uint32_t ) );
|
||||||
|
|
||||||
#if( ipconfigUSE_DNS_CACHE == 1 )
|
#if( ipconfigUSE_DNS_CACHE == 1 )
|
||||||
{
|
{
|
||||||
prvProcessDNSCache( pcName, &ulIPAddress, pdFALSE );
|
prvProcessDNSCache( pcName, &ulIPAddress, pxDNSAnswerRecord->ulTTL, pdFALSE );
|
||||||
}
|
}
|
||||||
#endif /* ipconfigUSE_DNS_CACHE */
|
#endif /* ipconfigUSE_DNS_CACHE */
|
||||||
#if( ipconfigDNS_USE_CALLBACKS != 0 )
|
#if( ipconfigDNS_USE_CALLBACKS != 0 )
|
||||||
|
@ -837,24 +1012,37 @@ uint16_t x, usDataLength, usQuestions;
|
||||||
#endif /* ipconfigDNS_USE_CALLBACKS != 0 */
|
#endif /* ipconfigDNS_USE_CALLBACKS != 0 */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pucByte += sizeof( DNSAnswerRecord_t ) + sizeof( uint32_t );
|
||||||
|
xSourceBytesRemaining -= ( sizeof( DNSAnswerRecord_t ) + sizeof( uint32_t ) );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
else if( xSourceBytesRemaining >= sizeof( DNSAnswerRecord_t ) )
|
||||||
|
{
|
||||||
|
/* It's not an A record, so skip it. Get the header location
|
||||||
|
and then jump over the header. */
|
||||||
|
pxDNSAnswerRecord = ( DNSAnswerRecord_t * )pucByte;
|
||||||
|
pucByte += sizeof( DNSAnswerRecord_t );
|
||||||
|
xSourceBytesRemaining -= sizeof( DNSAnswerRecord_t );
|
||||||
|
|
||||||
|
/* Determine the length of the answer data from the header. */
|
||||||
|
usDataLength = FreeRTOS_ntohs( pxDNSAnswerRecord->usDataLength );
|
||||||
|
|
||||||
|
/* Jump over the answer. */
|
||||||
|
if( xSourceBytesRemaining >= usDataLength )
|
||||||
|
{
|
||||||
|
pucByte += usDataLength;
|
||||||
|
xSourceBytesRemaining -= usDataLength;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Skip the type, class and time to live fields. */
|
/* Malformed response. */
|
||||||
pucByte += ( sizeof( uint32_t ) + sizeof( uint32_t ) );
|
return dnsPARSE_ERROR;
|
||||||
|
}
|
||||||
/* Determine the length of the data in the field. */
|
|
||||||
memcpy( ( void * ) &usDataLength, ( void * ) pucByte, sizeof( uint16_t ) );
|
|
||||||
usDataLength = FreeRTOS_ntohs( usDataLength );
|
|
||||||
|
|
||||||
/* Jump over the data length bytes, and the data itself. */
|
|
||||||
pucByte += usDataLength + sizeof( uint16_t );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#if( ipconfigUSE_LLMNR == 1 )
|
#if( ipconfigUSE_LLMNR == 1 )
|
||||||
else if( ( usQuestions != ( uint16_t )0u ) && ( usType == ( uint16_t )dnsTYPE_A_HOST ) && ( usClass == ( uint16_t )dnsCLASS_IN ) )
|
else if( usQuestions && ( usType == dnsTYPE_A_HOST ) && ( usClass == dnsCLASS_IN ) )
|
||||||
{
|
{
|
||||||
/* If this is not a reply to our DNS request, it might an LLMNR
|
/* If this is not a reply to our DNS request, it might an LLMNR
|
||||||
request. */
|
request. */
|
||||||
|
@ -867,7 +1055,7 @@ uint16_t x, usDataLength, usQuestions;
|
||||||
|
|
||||||
if( ( xBufferAllocFixedSize == pdFALSE ) && ( pxNetworkBuffer != NULL ) )
|
if( ( xBufferAllocFixedSize == pdFALSE ) && ( pxNetworkBuffer != NULL ) )
|
||||||
{
|
{
|
||||||
BaseType_t xDataLength = pxNetworkBuffer->xDataLength + sizeof( UDPHeader_t ) +
|
BaseType_t xDataLength = xBufferLength + sizeof( UDPHeader_t ) +
|
||||||
sizeof( EthernetHeader_t ) + sizeof( IPHeader_t );
|
sizeof( EthernetHeader_t ) + sizeof( IPHeader_t );
|
||||||
|
|
||||||
/* The field xDataLength was set to the length of the UDP payload.
|
/* The field xDataLength was set to the length of the UDP payload.
|
||||||
|
@ -900,7 +1088,7 @@ uint16_t x, usDataLength, usQuestions;
|
||||||
{
|
{
|
||||||
pxAnswer = (LLMNRAnswer_t *)pucByte;
|
pxAnswer = (LLMNRAnswer_t *)pucByte;
|
||||||
|
|
||||||
/* Leave 'usIdentifier' and 'usQuestions' untouched. */
|
/* We leave 'usIdentifier' and 'usQuestions' untouched */
|
||||||
vSetField16( pxDNSMessageHeader, DNSMessage_t, usFlags, dnsLLMNR_FLAGS_IS_REPONSE ); /* Set the response flag */
|
vSetField16( pxDNSMessageHeader, DNSMessage_t, usFlags, dnsLLMNR_FLAGS_IS_REPONSE ); /* Set the response flag */
|
||||||
vSetField16( pxDNSMessageHeader, DNSMessage_t, usAnswers, 1 ); /* Provide a single answer */
|
vSetField16( pxDNSMessageHeader, DNSMessage_t, usAnswers, 1 ); /* Provide a single answer */
|
||||||
vSetField16( pxDNSMessageHeader, DNSMessage_t, usAuthorityRRs, 0 ); /* No authority */
|
vSetField16( pxDNSMessageHeader, DNSMessage_t, usAuthorityRRs, 0 ); /* No authority */
|
||||||
|
@ -935,13 +1123,20 @@ uint16_t x, usDataLength, usQuestions;
|
||||||
|
|
||||||
#if( ipconfigUSE_NBNS == 1 )
|
#if( ipconfigUSE_NBNS == 1 )
|
||||||
|
|
||||||
static void prvTreatNBNS( uint8_t *pucUDPPayloadBuffer, uint32_t ulIPAddress )
|
static void prvTreatNBNS( uint8_t *pucUDPPayloadBuffer, size_t xBufferLength, uint32_t ulIPAddress )
|
||||||
{
|
{
|
||||||
uint16_t usFlags, usType, usClass;
|
uint16_t usFlags, usType, usClass;
|
||||||
uint8_t *pucSource, *pucTarget;
|
uint8_t *pucSource, *pucTarget;
|
||||||
uint8_t ucByte;
|
uint8_t ucByte;
|
||||||
uint8_t ucNBNSName[ 17 ];
|
uint8_t ucNBNSName[ 17 ];
|
||||||
|
|
||||||
|
/* Check for minimum buffer size. */
|
||||||
|
if( xBufferLength < sizeof( NBNSRequest_t ) )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Read the request flags in host endianness. */
|
||||||
usFlags = usChar2u16( pucUDPPayloadBuffer + offsetof( NBNSRequest_t, usFlags ) );
|
usFlags = usChar2u16( pucUDPPayloadBuffer + offsetof( NBNSRequest_t, usFlags ) );
|
||||||
|
|
||||||
if( ( usFlags & dnsNBNS_FLAGS_OPCODE_MASK ) == dnsNBNS_FLAGS_OPCODE_QUERY )
|
if( ( usFlags & dnsNBNS_FLAGS_OPCODE_MASK ) == dnsNBNS_FLAGS_OPCODE_QUERY )
|
||||||
|
@ -986,7 +1181,7 @@ uint16_t x, usDataLength, usQuestions;
|
||||||
{
|
{
|
||||||
/* If this is a response from another device,
|
/* If this is a response from another device,
|
||||||
add the name to the DNS cache */
|
add the name to the DNS cache */
|
||||||
prvProcessDNSCache( ( char * ) ucNBNSName, &ulIPAddress, pdFALSE );
|
prvProcessDNSCache( ( char * ) ucNBNSName, &ulIPAddress, 0, pdFALSE );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
@ -1012,7 +1207,6 @@ uint16_t x, usDataLength, usQuestions;
|
||||||
{
|
{
|
||||||
NetworkBufferDescriptor_t *pxNewBuffer;
|
NetworkBufferDescriptor_t *pxNewBuffer;
|
||||||
BaseType_t xDataLength = pxNetworkBuffer->xDataLength + sizeof( UDPHeader_t ) +
|
BaseType_t xDataLength = pxNetworkBuffer->xDataLength + sizeof( UDPHeader_t ) +
|
||||||
|
|
||||||
sizeof( EthernetHeader_t ) + sizeof( IPHeader_t );
|
sizeof( EthernetHeader_t ) + sizeof( IPHeader_t );
|
||||||
|
|
||||||
/* The field xDataLength was set to the length of the UDP payload.
|
/* The field xDataLength was set to the length of the UDP payload.
|
||||||
|
@ -1127,7 +1321,7 @@ TickType_t xTimeoutTime = pdMS_TO_TICKS( 200 );
|
||||||
pxIPHeader->usHeaderChecksum = ~FreeRTOS_htons( pxIPHeader->usHeaderChecksum );
|
pxIPHeader->usHeaderChecksum = ~FreeRTOS_htons( pxIPHeader->usHeaderChecksum );
|
||||||
|
|
||||||
/* calculate the UDP checksum for outgoing package */
|
/* calculate the UDP checksum for outgoing package */
|
||||||
usGenerateProtocolChecksum( ( uint8_t* ) pxUDPPacket, pdTRUE );
|
usGenerateProtocolChecksum( ( uint8_t* ) pxUDPPacket, lNetLength, pdTRUE );
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1143,10 +1337,12 @@ TickType_t xTimeoutTime = pdMS_TO_TICKS( 200 );
|
||||||
|
|
||||||
#if( ipconfigUSE_DNS_CACHE == 1 )
|
#if( ipconfigUSE_DNS_CACHE == 1 )
|
||||||
|
|
||||||
static void prvProcessDNSCache( const char *pcName, uint32_t *pulIP, BaseType_t xLookUp )
|
static void prvProcessDNSCache( const char *pcName, uint32_t *pulIP, uint32_t ulTTL, BaseType_t xLookUp )
|
||||||
{
|
{
|
||||||
BaseType_t x;
|
BaseType_t x;
|
||||||
BaseType_t xFound = pdFALSE;
|
BaseType_t xFound = pdFALSE;
|
||||||
|
uint32_t ulCurrentTimeSeconds =
|
||||||
|
xTaskGetTickCount( ) / portTICK_PERIOD_MS / 1000;
|
||||||
static BaseType_t xFreeEntry = 0;
|
static BaseType_t xFreeEntry = 0;
|
||||||
|
|
||||||
/* For each entry in the DNS cache table. */
|
/* For each entry in the DNS cache table. */
|
||||||
|
@ -1157,16 +1353,29 @@ TickType_t xTimeoutTime = pdMS_TO_TICKS( 200 );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( strncmp( xDNSCache[ x ].pcName, pcName, sizeof( xDNSCache[ x ].pcName ) ) == 0 )
|
if( 0 == strcmp( xDNSCache[ x ].pcName, pcName ) )
|
||||||
{
|
{
|
||||||
/* Is this function called for a lookup or to add/update an IP address? */
|
/* Is this function called for a lookup or to add/update an IP address? */
|
||||||
if( xLookUp != pdFALSE )
|
if( xLookUp != pdFALSE )
|
||||||
{
|
{
|
||||||
|
/* Confirm that the record is still fresh. */
|
||||||
|
if( ulCurrentTimeSeconds <
|
||||||
|
xDNSCache[ x ].ulTimeWhenAddedInSeconds +
|
||||||
|
FreeRTOS_ntohl( xDNSCache[ x ].ulTTL ) )
|
||||||
|
{
|
||||||
*pulIP = xDNSCache[ x ].ulIPAddress;
|
*pulIP = xDNSCache[ x ].ulIPAddress;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
/* Age out the old cached record. */
|
||||||
|
xDNSCache[ x ].pcName[ 0 ] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
xDNSCache[ x ].ulIPAddress = *pulIP;
|
xDNSCache[ x ].ulIPAddress = *pulIP;
|
||||||
|
xDNSCache[ x ].ulTTL = ulTTL;
|
||||||
|
xDNSCache[ x ].ulTimeWhenAddedInSeconds = ulCurrentTimeSeconds;
|
||||||
}
|
}
|
||||||
|
|
||||||
xFound = pdTRUE;
|
xFound = pdTRUE;
|
||||||
|
@ -1182,9 +1391,14 @@ TickType_t xTimeoutTime = pdMS_TO_TICKS( 200 );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Called to add or update an item */
|
/* Add or update the item. */
|
||||||
strncpy( xDNSCache[ xFreeEntry ].pcName, pcName, sizeof( xDNSCache[ xFreeEntry ].pcName ) );
|
if( strlen( pcName ) < ipconfigDNS_CACHE_NAME_LENGTH )
|
||||||
|
{
|
||||||
|
strcpy( xDNSCache[ xFreeEntry ].pcName, pcName );
|
||||||
|
|
||||||
xDNSCache[ xFreeEntry ].ulIPAddress = *pulIP;
|
xDNSCache[ xFreeEntry ].ulIPAddress = *pulIP;
|
||||||
|
xDNSCache[ xFreeEntry ].ulTTL = ulTTL;
|
||||||
|
xDNSCache[ xFreeEntry ].ulTimeWhenAddedInSeconds = ulCurrentTimeSeconds;
|
||||||
|
|
||||||
xFreeEntry++;
|
xFreeEntry++;
|
||||||
if( xFreeEntry == ipconfigDNS_CACHE_ENTRIES )
|
if( xFreeEntry == ipconfigDNS_CACHE_ENTRIES )
|
||||||
|
@ -1193,6 +1407,7 @@ TickType_t xTimeoutTime = pdMS_TO_TICKS( 200 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if( ( xLookUp == 0 ) || ( *pulIP != 0 ) )
|
if( ( xLookUp == 0 ) || ( *pulIP != 0 ) )
|
||||||
{
|
{
|
||||||
|
@ -1204,4 +1419,9 @@ TickType_t xTimeoutTime = pdMS_TO_TICKS( 200 );
|
||||||
|
|
||||||
#endif /* ipconfigUSE_DNS != 0 */
|
#endif /* ipconfigUSE_DNS != 0 */
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* Provide access to private members for testing. */
|
||||||
|
#ifdef AMAZON_FREERTOS_ENABLE_UNIT_TESTS
|
||||||
|
#include "aws_freertos_tcp_test_access_dns_define.h"
|
||||||
|
#endif
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* FreeRTOS+TCP V2.0.3
|
* FreeRTOS+TCP V2.0.7
|
||||||
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
@ -65,9 +65,7 @@ a constant. */
|
||||||
|
|
||||||
|
|
||||||
/* Time delay between repeated attempts to initialise the network hardware. */
|
/* Time delay between repeated attempts to initialise the network hardware. */
|
||||||
#ifndef ipINITIALISATION_RETRY_DELAY
|
#define ipINITIALISATION_RETRY_DELAY ( pdMS_TO_TICKS( 3000 ) )
|
||||||
#define ipINITIALISATION_RETRY_DELAY ( pdMS_TO_TICKS( 3000 ) )
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Defines how often the ARP timer callback function is executed. The time is
|
/* Defines how often the ARP timer callback function is executed. The time is
|
||||||
shorted in the Windows simulator as simulated time is not real time. */
|
shorted in the Windows simulator as simulated time is not real time. */
|
||||||
|
@ -186,7 +184,7 @@ static void prvProcessEthernetPacket( NetworkBufferDescriptor_t * const pxNetwor
|
||||||
/*
|
/*
|
||||||
* Process incoming IP packets.
|
* Process incoming IP packets.
|
||||||
*/
|
*/
|
||||||
static eFrameProcessingResult_t prvProcessIPPacket( const IPPacket_t * const pxIPPacket, NetworkBufferDescriptor_t * const pxNetworkBuffer );
|
static eFrameProcessingResult_t prvProcessIPPacket( IPPacket_t * const pxIPPacket, NetworkBufferDescriptor_t * const pxNetworkBuffer );
|
||||||
|
|
||||||
#if ( ipconfigREPLY_TO_INCOMING_PINGS == 1 ) || ( ipconfigSUPPORT_OUTGOING_PINGS == 1 )
|
#if ( ipconfigREPLY_TO_INCOMING_PINGS == 1 ) || ( ipconfigSUPPORT_OUTGOING_PINGS == 1 )
|
||||||
/*
|
/*
|
||||||
|
@ -356,11 +354,12 @@ struct freertos_sockaddr xAddress;
|
||||||
/* Calculate the acceptable maximum sleep time. */
|
/* Calculate the acceptable maximum sleep time. */
|
||||||
xNextIPSleep = prvCalculateSleepTime();
|
xNextIPSleep = prvCalculateSleepTime();
|
||||||
|
|
||||||
/* Wait until there is something to do. The event is initialised to "no
|
/* Wait until there is something to do. If the following call exits
|
||||||
event" in case the following call exits due to a time out rather than a
|
* due to a time out rather than a message being received, set a
|
||||||
message being received. */
|
* 'NoEvent' value. */
|
||||||
|
if ( xQueueReceive( xNetworkEventQueue, ( void * ) &xReceivedEvent, xNextIPSleep ) == pdFALSE ) {
|
||||||
xReceivedEvent.eEventType = eNoEvent;
|
xReceivedEvent.eEventType = eNoEvent;
|
||||||
xQueueReceive( xNetworkEventQueue, ( void * ) &xReceivedEvent, xNextIPSleep );
|
}
|
||||||
|
|
||||||
#if( ipconfigCHECK_IP_QUEUE_SPACE != 0 )
|
#if( ipconfigCHECK_IP_QUEUE_SPACE != 0 )
|
||||||
{
|
{
|
||||||
|
@ -655,14 +654,8 @@ static void prvCheckNetworkTimers( void )
|
||||||
#if( ipconfigUSE_TCP == 1 )
|
#if( ipconfigUSE_TCP == 1 )
|
||||||
{
|
{
|
||||||
BaseType_t xWillSleep;
|
BaseType_t xWillSleep;
|
||||||
/* xStart keeps a copy of the last time this function was active,
|
TickType_t xNextTime;
|
||||||
and during every call it will be updated with xTaskGetTickCount()
|
|
||||||
'0' means: not yet initialised (although later '0' might be returned
|
|
||||||
by xTaskGetTickCount(), which is no problem). */
|
|
||||||
static TickType_t xStart = ( TickType_t ) 0;
|
|
||||||
TickType_t xTimeNow, xNextTime;
|
|
||||||
BaseType_t xCheckTCPSockets;
|
BaseType_t xCheckTCPSockets;
|
||||||
extern uint32_t ulNextInitialSequenceNumber;
|
|
||||||
|
|
||||||
if( uxQueueMessagesWaiting( xNetworkEventQueue ) == 0u )
|
if( uxQueueMessagesWaiting( xNetworkEventQueue ) == 0u )
|
||||||
{
|
{
|
||||||
|
@ -673,19 +666,6 @@ static void prvCheckNetworkTimers( void )
|
||||||
xWillSleep = pdFALSE;
|
xWillSleep = pdFALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
xTimeNow = xTaskGetTickCount();
|
|
||||||
|
|
||||||
if( xStart != ( TickType_t ) 0 )
|
|
||||||
{
|
|
||||||
/* It is advised to increment the Initial Sequence Number every 4
|
|
||||||
microseconds which makes 250 times per ms. This will make it harder
|
|
||||||
for a third party to 'guess' our sequence number and 'take over'
|
|
||||||
a TCP connection */
|
|
||||||
ulNextInitialSequenceNumber += ipINITIAL_SEQUENCE_NUMBER_FACTOR * ( ( xTimeNow - xStart ) * portTICK_PERIOD_MS );
|
|
||||||
}
|
|
||||||
|
|
||||||
xStart = xTimeNow;
|
|
||||||
|
|
||||||
/* Sockets need to be checked if the TCP timer has expired. */
|
/* Sockets need to be checked if the TCP timer has expired. */
|
||||||
xCheckTCPSockets = prvIPTimerCheck( &xTCPTimer );
|
xCheckTCPSockets = prvIPTimerCheck( &xTCPTimer );
|
||||||
|
|
||||||
|
@ -823,6 +803,10 @@ void *pvReturn;
|
||||||
|
|
||||||
if( pxNetworkBuffer != NULL )
|
if( pxNetworkBuffer != NULL )
|
||||||
{
|
{
|
||||||
|
/* Set the actual packet size in case a bigger buffer was returned. */
|
||||||
|
pxNetworkBuffer->xDataLength =
|
||||||
|
sizeof( UDPPacket_t ) + xRequestedSizeBytes;
|
||||||
|
|
||||||
/* Leave space for the UPD header. */
|
/* Leave space for the UPD header. */
|
||||||
pvReturn = ( void * ) &( pxNetworkBuffer->pucEthernetBuffer[ ipUDP_PAYLOAD_OFFSET_IPv4 ] );
|
pvReturn = ( void * ) &( pxNetworkBuffer->pucEthernetBuffer[ ipUDP_PAYLOAD_OFFSET_IPv4 ] );
|
||||||
}
|
}
|
||||||
|
@ -847,6 +831,11 @@ NetworkBufferDescriptor_t * pxNewBuffer;
|
||||||
|
|
||||||
if( pxNewBuffer != NULL )
|
if( pxNewBuffer != NULL )
|
||||||
{
|
{
|
||||||
|
/* Set the actual packet size in case a bigger buffer than requested
|
||||||
|
was returned. */
|
||||||
|
pxNewBuffer->xDataLength = xNewLength;
|
||||||
|
|
||||||
|
/* Copy the original packet information. */
|
||||||
pxNewBuffer->ulIPAddress = pxNetworkBuffer->ulIPAddress;
|
pxNewBuffer->ulIPAddress = pxNetworkBuffer->ulIPAddress;
|
||||||
pxNewBuffer->usPort = pxNetworkBuffer->usPort;
|
pxNewBuffer->usPort = pxNetworkBuffer->usPort;
|
||||||
pxNewBuffer->usBoundPort = pxNetworkBuffer->usBoundPort;
|
pxNewBuffer->usBoundPort = pxNetworkBuffer->usBoundPort;
|
||||||
|
@ -997,11 +986,8 @@ BaseType_t xReturn = pdFALSE;
|
||||||
|
|
||||||
/* Added to prevent ARP flood to gateway. Ensure the
|
/* Added to prevent ARP flood to gateway. Ensure the
|
||||||
gateway is on the same subnet as the IP address. */
|
gateway is on the same subnet as the IP address. */
|
||||||
if( xNetworkAddressing.ulGatewayAddress != 0ul )
|
|
||||||
{
|
|
||||||
configASSERT( ( ( *ipLOCAL_IP_ADDRESS_POINTER ) & xNetworkAddressing.ulNetMask ) == ( xNetworkAddressing.ulGatewayAddress & xNetworkAddressing.ulNetMask ) );
|
configASSERT( ( ( *ipLOCAL_IP_ADDRESS_POINTER ) & xNetworkAddressing.ulNetMask ) == ( xNetworkAddressing.ulGatewayAddress & xNetworkAddressing.ulNetMask ) );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
#endif /* ipconfigUSE_DHCP == 1 */
|
#endif /* ipconfigUSE_DHCP == 1 */
|
||||||
|
|
||||||
/* The MAC address is stored in the start of the default packet
|
/* The MAC address is stored in the start of the default packet
|
||||||
|
@ -1009,10 +995,13 @@ BaseType_t xReturn = pdFALSE;
|
||||||
memcpy( ( void * ) ipLOCAL_MAC_ADDRESS, ( void * ) ucMACAddress, ( size_t ) ipMAC_ADDRESS_LENGTH_BYTES );
|
memcpy( ( void * ) ipLOCAL_MAC_ADDRESS, ( void * ) ucMACAddress, ( size_t ) ipMAC_ADDRESS_LENGTH_BYTES );
|
||||||
|
|
||||||
/* Prepare the sockets interface. */
|
/* Prepare the sockets interface. */
|
||||||
vNetworkSocketsInit();
|
xReturn = vNetworkSocketsInit();
|
||||||
|
|
||||||
|
if( pdTRUE == xReturn )
|
||||||
|
{
|
||||||
/* Create the task that processes Ethernet and stack events. */
|
/* Create the task that processes Ethernet and stack events. */
|
||||||
xReturn = xTaskCreate( prvIPTask, "IP-task", ( uint16_t ) ipconfigIP_TASK_STACK_SIZE_WORDS, NULL, ( UBaseType_t ) ipconfigIP_TASK_PRIORITY, &xIPTaskHandle );
|
xReturn = xTaskCreate( prvIPTask, "IP-task", ( uint16_t )ipconfigIP_TASK_STACK_SIZE_WORDS, NULL, ( UBaseType_t )ipconfigIP_TASK_PRIORITY, &xIPTaskHandle );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1356,35 +1345,52 @@ void vIPNetworkUpCalls( void )
|
||||||
static void prvProcessEthernetPacket( NetworkBufferDescriptor_t * const pxNetworkBuffer )
|
static void prvProcessEthernetPacket( NetworkBufferDescriptor_t * const pxNetworkBuffer )
|
||||||
{
|
{
|
||||||
EthernetHeader_t *pxEthernetHeader;
|
EthernetHeader_t *pxEthernetHeader;
|
||||||
volatile eFrameProcessingResult_t eReturned; /* Volatile to prevent complier warnings when ipCONSIDER_FRAME_FOR_PROCESSING just sets it to eProcessBuffer. */
|
eFrameProcessingResult_t eReturned = eReleaseBuffer;
|
||||||
|
|
||||||
configASSERT( pxNetworkBuffer );
|
configASSERT( pxNetworkBuffer );
|
||||||
|
|
||||||
/* Interpret the Ethernet frame. */
|
/* Interpret the Ethernet frame. */
|
||||||
|
if( pxNetworkBuffer->xDataLength >= sizeof( EthernetHeader_t ) )
|
||||||
|
{
|
||||||
eReturned = ipCONSIDER_FRAME_FOR_PROCESSING( pxNetworkBuffer->pucEthernetBuffer );
|
eReturned = ipCONSIDER_FRAME_FOR_PROCESSING( pxNetworkBuffer->pucEthernetBuffer );
|
||||||
pxEthernetHeader = ( EthernetHeader_t * ) ( pxNetworkBuffer->pucEthernetBuffer );
|
pxEthernetHeader = ( EthernetHeader_t * )( pxNetworkBuffer->pucEthernetBuffer );
|
||||||
|
|
||||||
if( eReturned == eProcessBuffer )
|
if( eReturned == eProcessBuffer )
|
||||||
{
|
{
|
||||||
/* Interpret the received Ethernet packet. */
|
/* Interpret the received Ethernet packet. */
|
||||||
switch( pxEthernetHeader->usFrameType )
|
switch( pxEthernetHeader->usFrameType )
|
||||||
{
|
{
|
||||||
case ipARP_FRAME_TYPE :
|
case ipARP_FRAME_TYPE:
|
||||||
/* The Ethernet frame contains an ARP packet. */
|
/* The Ethernet frame contains an ARP packet. */
|
||||||
eReturned = eARPProcessPacket( ( ARPPacket_t * ) pxNetworkBuffer->pucEthernetBuffer );
|
if( pxNetworkBuffer->xDataLength >= sizeof( ARPPacket_t ) )
|
||||||
|
{
|
||||||
|
eReturned = eARPProcessPacket( ( ARPPacket_t * )pxNetworkBuffer->pucEthernetBuffer );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
eReturned = eReleaseBuffer;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ipIPv4_FRAME_TYPE :
|
case ipIPv4_FRAME_TYPE:
|
||||||
/* The Ethernet frame contains an IP packet. */
|
/* The Ethernet frame contains an IP packet. */
|
||||||
eReturned = prvProcessIPPacket( ( IPPacket_t * ) pxNetworkBuffer->pucEthernetBuffer, pxNetworkBuffer );
|
if( pxNetworkBuffer->xDataLength >= sizeof( IPPacket_t ) )
|
||||||
|
{
|
||||||
|
eReturned = prvProcessIPPacket( ( IPPacket_t * )pxNetworkBuffer->pucEthernetBuffer, pxNetworkBuffer );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
eReturned = eReleaseBuffer;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default :
|
default:
|
||||||
/* No other packet types are handled. Nothing to do. */
|
/* No other packet types are handled. Nothing to do. */
|
||||||
eReturned = eReleaseBuffer;
|
eReturned = eReleaseBuffer;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Perform any actions that resulted from processing the Ethernet frame. */
|
/* Perform any actions that resulted from processing the Ethernet frame. */
|
||||||
switch( eReturned )
|
switch( eReturned )
|
||||||
|
@ -1433,9 +1439,9 @@ eFrameProcessingResult_t eReturn = eProcessBuffer;
|
||||||
This method may decrease the usage of sparse network buffers. */
|
This method may decrease the usage of sparse network buffers. */
|
||||||
uint32_t ulDestinationIPAddress = pxIPHeader->ulDestinationIPAddress;
|
uint32_t ulDestinationIPAddress = pxIPHeader->ulDestinationIPAddress;
|
||||||
|
|
||||||
/* Ensure that the incoming packet is not fragmented (fragmentation
|
/* Ensure that the incoming packet is not fragmented (only outgoing
|
||||||
was only supported for outgoing packets, and is not currently
|
packets can be fragmented) as these are the only handled IP frames
|
||||||
not supported at all). */
|
currently. */
|
||||||
if( ( pxIPHeader->usFragmentOffset & ipFRAGMENT_OFFSET_BIT_MASK ) != 0U )
|
if( ( pxIPHeader->usFragmentOffset & ipFRAGMENT_OFFSET_BIT_MASK ) != 0U )
|
||||||
{
|
{
|
||||||
/* Can not handle, fragmented packet. */
|
/* Can not handle, fragmented packet. */
|
||||||
|
@ -1481,7 +1487,7 @@ eFrameProcessingResult_t eReturn = eProcessBuffer;
|
||||||
eReturn = eReleaseBuffer;
|
eReturn = eReleaseBuffer;
|
||||||
}
|
}
|
||||||
/* Is the upper-layer checksum (TCP/UDP/ICMP) correct? */
|
/* Is the upper-layer checksum (TCP/UDP/ICMP) correct? */
|
||||||
else if( usGenerateProtocolChecksum( ( uint8_t * )( pxNetworkBuffer->pucEthernetBuffer ), pdFALSE ) != ipCORRECT_CRC )
|
else if( usGenerateProtocolChecksum( ( uint8_t * )( pxNetworkBuffer->pucEthernetBuffer ), pxNetworkBuffer->xDataLength, pdFALSE ) != ipCORRECT_CRC )
|
||||||
{
|
{
|
||||||
/* Protocol checksum not accepted. */
|
/* Protocol checksum not accepted. */
|
||||||
eReturn = eReleaseBuffer;
|
eReturn = eReleaseBuffer;
|
||||||
|
@ -1500,13 +1506,22 @@ eFrameProcessingResult_t eReturn = eProcessBuffer;
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
static eFrameProcessingResult_t prvProcessIPPacket( const IPPacket_t * const pxIPPacket, NetworkBufferDescriptor_t * const pxNetworkBuffer )
|
static eFrameProcessingResult_t prvProcessIPPacket( IPPacket_t * const pxIPPacket, NetworkBufferDescriptor_t * const pxNetworkBuffer )
|
||||||
{
|
{
|
||||||
eFrameProcessingResult_t eReturn;
|
eFrameProcessingResult_t eReturn;
|
||||||
const IPHeader_t * pxIPHeader = &( pxIPPacket->xIPHeader );
|
IPHeader_t * pxIPHeader = &( pxIPPacket->xIPHeader );
|
||||||
UBaseType_t uxHeaderLength = ( UBaseType_t ) ( ( pxIPHeader->ucVersionHeaderLength & 0x0Fu ) << 2 );
|
UBaseType_t uxHeaderLength = ( UBaseType_t ) ( ( pxIPHeader->ucVersionHeaderLength & 0x0Fu ) << 2 );
|
||||||
uint8_t ucProtocol;
|
uint8_t ucProtocol;
|
||||||
|
|
||||||
|
/* Bound the calculated header length: take away the Ethernet header size,
|
||||||
|
then check if the IP header is claiming to be longer than the remaining
|
||||||
|
total packet size. Also check for minimal header field length. */
|
||||||
|
if( uxHeaderLength > pxNetworkBuffer->xDataLength - ipSIZE_OF_ETH_HEADER ||
|
||||||
|
uxHeaderLength < ipSIZE_OF_IPv4_HEADER )
|
||||||
|
{
|
||||||
|
return eReleaseBuffer;
|
||||||
|
}
|
||||||
|
|
||||||
ucProtocol = pxIPPacket->xIPHeader.ucProtocol;
|
ucProtocol = pxIPPacket->xIPHeader.ucProtocol;
|
||||||
/* Check if the IP headers are acceptable and if it has our destination. */
|
/* Check if the IP headers are acceptable and if it has our destination. */
|
||||||
eReturn = prvAllowIPPacket( pxIPPacket, pxNetworkBuffer, uxHeaderLength );
|
eReturn = prvAllowIPPacket( pxIPPacket, pxNetworkBuffer, uxHeaderLength );
|
||||||
|
@ -1520,15 +1535,21 @@ uint8_t ucProtocol;
|
||||||
* Note: IP options are mostly use in Multi-cast protocols */
|
* Note: IP options are mostly use in Multi-cast protocols */
|
||||||
const size_t optlen = ( ( size_t ) uxHeaderLength ) - ipSIZE_OF_IPv4_HEADER;
|
const size_t optlen = ( ( size_t ) uxHeaderLength ) - ipSIZE_OF_IPv4_HEADER;
|
||||||
/* From: the previous start of UDP/ICMP/TCP data */
|
/* From: the previous start of UDP/ICMP/TCP data */
|
||||||
uint8_t *pucSource = ( ( uint8_t * ) pxIPHeader ) + uxHeaderLength;
|
uint8_t *pucSource = ( uint8_t* )(pxNetworkBuffer->pucEthernetBuffer + sizeof( EthernetHeader_t ) + uxHeaderLength);
|
||||||
/* To: the usual start of UDP/ICMP/TCP data at offset 20 from IP header */
|
/* To: the usual start of UDP/ICMP/TCP data at offset 20 from IP header */
|
||||||
uint8_t *pucTarget = ( ( uint8_t * ) pxIPHeader ) + ipSIZE_OF_IPv4_HEADER;
|
uint8_t *pucTarget = ( uint8_t* )(pxNetworkBuffer->pucEthernetBuffer + sizeof( EthernetHeader_t ) + ipSIZE_OF_IPv4_HEADER);
|
||||||
/* How many: total length minus the options and the lower headers */
|
/* How many: total length minus the options and the lower headers */
|
||||||
const size_t xMoveLen = pxNetworkBuffer->xDataLength - optlen - ipSIZE_OF_IPv4_HEADER - ipSIZE_OF_ETH_HEADER;
|
const size_t xMoveLen = pxNetworkBuffer->xDataLength - optlen - ipSIZE_OF_IPv4_HEADER - ipSIZE_OF_ETH_HEADER;
|
||||||
|
|
||||||
memmove( pucTarget, pucSource, xMoveLen );
|
memmove( pucTarget, pucSource, xMoveLen );
|
||||||
pxNetworkBuffer->xDataLength -= optlen;
|
pxNetworkBuffer->xDataLength -= optlen;
|
||||||
|
|
||||||
|
/* Fix-up new version/header length field in IP packet. */
|
||||||
|
pxIPHeader->ucVersionHeaderLength =
|
||||||
|
( pxIPHeader->ucVersionHeaderLength & 0xF0 ) | /* High nibble is the version. */
|
||||||
|
( ( ipSIZE_OF_IPv4_HEADER >> 2 ) & 0x0F ); /* Low nibble is the header size, in bytes, divided by four. */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Add the IP and MAC addresses to the ARP table if they are not
|
/* Add the IP and MAC addresses to the ARP table if they are not
|
||||||
already there - otherwise refresh the age of the existing
|
already there - otherwise refresh the age of the existing
|
||||||
entry. */
|
entry. */
|
||||||
|
@ -1552,10 +1573,17 @@ uint8_t ucProtocol;
|
||||||
be able to validate what it receives. */
|
be able to validate what it receives. */
|
||||||
#if ( ipconfigREPLY_TO_INCOMING_PINGS == 1 ) || ( ipconfigSUPPORT_OUTGOING_PINGS == 1 )
|
#if ( ipconfigREPLY_TO_INCOMING_PINGS == 1 ) || ( ipconfigSUPPORT_OUTGOING_PINGS == 1 )
|
||||||
{
|
{
|
||||||
ICMPPacket_t *pxICMPPacket = ( ICMPPacket_t * ) ( pxNetworkBuffer->pucEthernetBuffer );
|
if( pxNetworkBuffer->xDataLength >= sizeof( ICMPPacket_t ) )
|
||||||
|
{
|
||||||
|
ICMPPacket_t *pxICMPPacket = ( ICMPPacket_t * )( pxNetworkBuffer->pucEthernetBuffer );
|
||||||
if( pxIPHeader->ulDestinationIPAddress == *ipLOCAL_IP_ADDRESS_POINTER )
|
if( pxIPHeader->ulDestinationIPAddress == *ipLOCAL_IP_ADDRESS_POINTER )
|
||||||
{
|
{
|
||||||
eReturn = prvProcessICMPPacket( pxICMPPacket );
|
eReturn = prvProcessICMPPacket( pxICMPPacket );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
eReturn = eReleaseBuffer;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* ( ipconfigREPLY_TO_INCOMING_PINGS == 1 ) || ( ipconfigSUPPORT_OUTGOING_PINGS == 1 ) */
|
#endif /* ( ipconfigREPLY_TO_INCOMING_PINGS == 1 ) || ( ipconfigSUPPORT_OUTGOING_PINGS == 1 ) */
|
||||||
|
@ -1566,22 +1594,46 @@ uint8_t ucProtocol;
|
||||||
/* The IP packet contained a UDP frame. */
|
/* The IP packet contained a UDP frame. */
|
||||||
UDPPacket_t *pxUDPPacket = ( UDPPacket_t * ) ( pxNetworkBuffer->pucEthernetBuffer );
|
UDPPacket_t *pxUDPPacket = ( UDPPacket_t * ) ( pxNetworkBuffer->pucEthernetBuffer );
|
||||||
|
|
||||||
/* Note the header values required prior to the
|
/* Only proceed if the payload length indicated in the header
|
||||||
checksum generation as the checksum pseudo header
|
appears to be valid. */
|
||||||
may clobber some of these values. */
|
if ( pxNetworkBuffer->xDataLength >= sizeof( UDPPacket_t ) )
|
||||||
pxNetworkBuffer->xDataLength = FreeRTOS_ntohs( pxUDPPacket->xUDPHeader.usLength ) - sizeof( UDPHeader_t );
|
{
|
||||||
/* HT:endian: fields in pxNetworkBuffer (usPort, ulIPAddress) were network order */
|
/* Ensure that downstream UDP packet handling has the lesser
|
||||||
|
* of: the actual network buffer Ethernet frame length, or
|
||||||
|
* the sender's UDP packet header payload length, minus the
|
||||||
|
* size of the UDP header.
|
||||||
|
*
|
||||||
|
* The size of the UDP packet structure in this implementation
|
||||||
|
* includes the size of the Ethernet header, the size of
|
||||||
|
* the IP header, and the size of the UDP header.
|
||||||
|
*/
|
||||||
|
|
||||||
|
pxNetworkBuffer->xDataLength -= sizeof( UDPPacket_t );
|
||||||
|
if( ( FreeRTOS_ntohs( pxUDPPacket->xUDPHeader.usLength ) - sizeof( UDPHeader_t ) ) <
|
||||||
|
pxNetworkBuffer->xDataLength )
|
||||||
|
{
|
||||||
|
pxNetworkBuffer->xDataLength = FreeRTOS_ntohs( pxUDPPacket->xUDPHeader.usLength ) -
|
||||||
|
sizeof( UDPHeader_t );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Fields in pxNetworkBuffer (usPort, ulIPAddress) are network order. */
|
||||||
pxNetworkBuffer->usPort = pxUDPPacket->xUDPHeader.usSourcePort;
|
pxNetworkBuffer->usPort = pxUDPPacket->xUDPHeader.usSourcePort;
|
||||||
pxNetworkBuffer->ulIPAddress = pxUDPPacket->xIPHeader.ulSourceIPAddress;
|
pxNetworkBuffer->ulIPAddress = pxUDPPacket->xIPHeader.ulSourceIPAddress;
|
||||||
|
|
||||||
/* ipconfigDRIVER_INCLUDED_RX_IP_CHECKSUM:
|
/* ipconfigDRIVER_INCLUDED_RX_IP_CHECKSUM:
|
||||||
* In some cases, the upper-layer checksum has been calculated
|
* In some cases, the upper-layer checksum has been calculated
|
||||||
* by the NIC driver */
|
* by the NIC driver.
|
||||||
/* Pass the packet payload to the UDP sockets implementation. */
|
*
|
||||||
/* HT:endian: xProcessReceivedUDPPacket wanted network order */
|
* Pass the packet payload to the UDP sockets implementation. */
|
||||||
if( xProcessReceivedUDPPacket( pxNetworkBuffer, pxUDPPacket->xUDPHeader.usDestinationPort ) == pdPASS )
|
if( xProcessReceivedUDPPacket( pxNetworkBuffer,
|
||||||
|
pxUDPPacket->xUDPHeader.usDestinationPort ) == pdPASS )
|
||||||
{
|
{
|
||||||
eReturn = eFrameConsumed;
|
eReturn = eFrameConsumed;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
eReturn = eReleaseBuffer;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -1739,7 +1791,7 @@ uint8_t ucProtocol;
|
||||||
#endif /* ( ipconfigREPLY_TO_INCOMING_PINGS == 1 ) || ( ipconfigSUPPORT_OUTGOING_PINGS == 1 ) */
|
#endif /* ( ipconfigREPLY_TO_INCOMING_PINGS == 1 ) || ( ipconfigSUPPORT_OUTGOING_PINGS == 1 ) */
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
uint16_t usGenerateProtocolChecksum( const uint8_t * const pucEthernetBuffer, BaseType_t xOutgoingPacket )
|
uint16_t usGenerateProtocolChecksum( const uint8_t * const pucEthernetBuffer, size_t uxBufferLength, BaseType_t xOutgoingPacket )
|
||||||
{
|
{
|
||||||
uint32_t ulLength;
|
uint32_t ulLength;
|
||||||
uint16_t usChecksum, *pusChecksum;
|
uint16_t usChecksum, *pusChecksum;
|
||||||
|
@ -1751,13 +1803,48 @@ uint8_t ucProtocol;
|
||||||
const char *pcType;
|
const char *pcType;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Check for minimum packet size. */
|
||||||
|
if( uxBufferLength < sizeof( IPPacket_t ) )
|
||||||
|
{
|
||||||
|
return ipINVALID_LENGTH;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Parse the packet length. */
|
||||||
pxIPPacket = ( const IPPacket_t * ) pucEthernetBuffer;
|
pxIPPacket = ( const IPPacket_t * ) pucEthernetBuffer;
|
||||||
uxIPHeaderLength = ( UBaseType_t ) ( 4u * ( pxIPPacket->xIPHeader.ucVersionHeaderLength & 0x0Fu ) ); /*_RB_ Why 4? */
|
|
||||||
pxProtPack = ( ProtocolPacket_t * ) ( pucEthernetBuffer + ( uxIPHeaderLength - ipSIZE_OF_IPv4_HEADER ) );
|
/* Per https://tools.ietf.org/html/rfc791, the four-bit Internet Header
|
||||||
|
Length field contains the length of the internet header in 32-bit words. */
|
||||||
|
uxIPHeaderLength = ( UBaseType_t )
|
||||||
|
( sizeof( uint32_t ) * ( pxIPPacket->xIPHeader.ucVersionHeaderLength & 0x0Fu ) );
|
||||||
|
|
||||||
|
/* Check for minimum packet size. */
|
||||||
|
if( uxBufferLength < sizeof( IPPacket_t ) + uxIPHeaderLength - ipSIZE_OF_IPv4_HEADER )
|
||||||
|
{
|
||||||
|
return ipINVALID_LENGTH;
|
||||||
|
}
|
||||||
|
if( uxBufferLength < FreeRTOS_ntohs( pxIPPacket->xIPHeader.usLength ) )
|
||||||
|
{
|
||||||
|
return ipINVALID_LENGTH;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Identify the next protocol. */
|
||||||
ucProtocol = pxIPPacket->xIPHeader.ucProtocol;
|
ucProtocol = pxIPPacket->xIPHeader.ucProtocol;
|
||||||
|
|
||||||
|
/* N.B., if this IP packet header includes Options, then the following
|
||||||
|
assignment results in a pointer into the protocol packet with the Ethernet
|
||||||
|
and IP headers incorrectly aligned. However, either way, the "third"
|
||||||
|
protocol (Layer 3 or 4) header will be aligned, which is the convenience
|
||||||
|
of this calculation. */
|
||||||
|
pxProtPack = ( ProtocolPacket_t * ) ( pucEthernetBuffer + ( uxIPHeaderLength - ipSIZE_OF_IPv4_HEADER ) );
|
||||||
|
|
||||||
|
/* Switch on the Layer 3/4 protocol. */
|
||||||
if( ucProtocol == ( uint8_t ) ipPROTOCOL_UDP )
|
if( ucProtocol == ( uint8_t ) ipPROTOCOL_UDP )
|
||||||
{
|
{
|
||||||
|
if( uxBufferLength < uxIPHeaderLength + ipSIZE_OF_ETH_HEADER + ipSIZE_OF_UDP_HEADER )
|
||||||
|
{
|
||||||
|
return ipINVALID_LENGTH;
|
||||||
|
}
|
||||||
|
|
||||||
pusChecksum = ( uint16_t * ) ( &( pxProtPack->xUDPPacket.xUDPHeader.usChecksum ) );
|
pusChecksum = ( uint16_t * ) ( &( pxProtPack->xUDPPacket.xUDPHeader.usChecksum ) );
|
||||||
#if( ipconfigHAS_DEBUG_PRINTF != 0 )
|
#if( ipconfigHAS_DEBUG_PRINTF != 0 )
|
||||||
{
|
{
|
||||||
|
@ -1767,6 +1854,11 @@ uint8_t ucProtocol;
|
||||||
}
|
}
|
||||||
else if( ucProtocol == ( uint8_t ) ipPROTOCOL_TCP )
|
else if( ucProtocol == ( uint8_t ) ipPROTOCOL_TCP )
|
||||||
{
|
{
|
||||||
|
if( uxBufferLength < uxIPHeaderLength + ipSIZE_OF_ETH_HEADER + ipSIZE_OF_TCP_HEADER )
|
||||||
|
{
|
||||||
|
return ipINVALID_LENGTH;
|
||||||
|
}
|
||||||
|
|
||||||
pusChecksum = ( uint16_t * ) ( &( pxProtPack->xTCPPacket.xTCPHeader.usChecksum ) );
|
pusChecksum = ( uint16_t * ) ( &( pxProtPack->xTCPPacket.xTCPHeader.usChecksum ) );
|
||||||
#if( ipconfigHAS_DEBUG_PRINTF != 0 )
|
#if( ipconfigHAS_DEBUG_PRINTF != 0 )
|
||||||
{
|
{
|
||||||
|
@ -1777,8 +1869,12 @@ uint8_t ucProtocol;
|
||||||
else if( ( ucProtocol == ( uint8_t ) ipPROTOCOL_ICMP ) ||
|
else if( ( ucProtocol == ( uint8_t ) ipPROTOCOL_ICMP ) ||
|
||||||
( ucProtocol == ( uint8_t ) ipPROTOCOL_IGMP ) )
|
( ucProtocol == ( uint8_t ) ipPROTOCOL_IGMP ) )
|
||||||
{
|
{
|
||||||
pusChecksum = ( uint16_t * ) ( &( pxProtPack->xICMPPacket.xICMPHeader.usChecksum ) );
|
if( uxBufferLength < uxIPHeaderLength + ipSIZE_OF_ETH_HEADER + ipSIZE_OF_ICMP_HEADER )
|
||||||
|
{
|
||||||
|
return ipINVALID_LENGTH;
|
||||||
|
}
|
||||||
|
|
||||||
|
pusChecksum = ( uint16_t * ) ( &( pxProtPack->xICMPPacket.xICMPHeader.usChecksum ) );
|
||||||
#if( ipconfigHAS_DEBUG_PRINTF != 0 )
|
#if( ipconfigHAS_DEBUG_PRINTF != 0 )
|
||||||
{
|
{
|
||||||
if( ucProtocol == ( uint8_t ) ipPROTOCOL_ICMP )
|
if( ucProtocol == ( uint8_t ) ipPROTOCOL_ICMP )
|
||||||
|
@ -1798,6 +1894,8 @@ uint8_t ucProtocol;
|
||||||
return ipUNHANDLED_PROTOCOL;
|
return ipUNHANDLED_PROTOCOL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* The protocol and checksum field have been identified. Check the direction
|
||||||
|
of the packet. */
|
||||||
if( xOutgoingPacket != pdFALSE )
|
if( xOutgoingPacket != pdFALSE )
|
||||||
{
|
{
|
||||||
/* This is an outgoing packet. Before calculating the checksum, set it
|
/* This is an outgoing packet. Before calculating the checksum, set it
|
||||||
|
@ -1844,7 +1942,7 @@ uint8_t ucProtocol;
|
||||||
/* And then continue at the IPv4 source and destination addresses. */
|
/* And then continue at the IPv4 source and destination addresses. */
|
||||||
usChecksum = ( uint16_t )
|
usChecksum = ( uint16_t )
|
||||||
( ~usGenerateChecksum( ( uint32_t ) usChecksum, ( uint8_t * )&( pxIPPacket->xIPHeader.ulSourceIPAddress ),
|
( ~usGenerateChecksum( ( uint32_t ) usChecksum, ( uint8_t * )&( pxIPPacket->xIPHeader.ulSourceIPAddress ),
|
||||||
( size_t )( 2u * sizeof( pxIPPacket->xIPHeader.ulSourceIPAddress ) + ulLength ) ) );
|
( 2u * sizeof( pxIPPacket->xIPHeader.ulSourceIPAddress ) + ulLength ) ) );
|
||||||
|
|
||||||
/* Sum TCP header and data. */
|
/* Sum TCP header and data. */
|
||||||
}
|
}
|
||||||
|
@ -1897,6 +1995,39 @@ uint8_t ucProtocol;
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method generates a checksum for a given IPv4 header, per RFC791 (page 14).
|
||||||
|
* The checksum algorithm is decribed as:
|
||||||
|
* "[T]he 16 bit one's complement of the one's complement sum of all 16 bit words in the
|
||||||
|
* header. For purposes of computing the checksum, the value of the checksum field is zero."
|
||||||
|
*
|
||||||
|
* In a nutshell, that means that each 16-bit 'word' must be summed, after which
|
||||||
|
* the number of 'carries' (overflows) is added to the result. If that addition
|
||||||
|
* produces an overflow, that 'carry' must also be added to the final result. The final checksum
|
||||||
|
* should be the bitwise 'not' (ones-complement) of the result if the packet is
|
||||||
|
* meant to be transmitted, but this method simply returns the raw value, probably
|
||||||
|
* because when a packet is received, the checksum is verified by checking that
|
||||||
|
* ((received & calculated) == 0) without applying a bitwise 'not' to the 'calculated' checksum.
|
||||||
|
*
|
||||||
|
* This logic is optimized for microcontrollers which have limited resources, so the logic looks odd.
|
||||||
|
* It iterates over the full range of 16-bit words, but it does so by processing several 32-bit
|
||||||
|
* words at once whenever possible. Its first step is to align the memory pointer to a 32-bit boundary,
|
||||||
|
* after which it runs a fast loop to process multiple 32-bit words at once and adding their 'carries'.
|
||||||
|
* Finally, it finishes up by processing any remaining 16-bit words, and adding up all of the 'carries'.
|
||||||
|
* With 32-bit arithmetic, the number of 16-bit 'carries' produced by sequential additions can be found
|
||||||
|
* by looking at the 16 most-significant bits of the 32-bit integer, since a 32-bit int will continue
|
||||||
|
* counting up instead of overflowing after 16 bits. That is why the actual checksum calculations look like:
|
||||||
|
* union.u32 = ( uint32_t ) union.u16[ 0 ] + union.u16[ 1 ];
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* ulSum: This argument provides a value to initialize the progressive summation
|
||||||
|
* of the header's values to. It is often 0, but protocols like TCP or UDP
|
||||||
|
* can have pseudo-header fields which need to be included in the checksum.
|
||||||
|
* pucNextData: This argument contains the address of the first byte which this
|
||||||
|
* method should process. The method's memory iterator is initialized to this value.
|
||||||
|
* uxDataLengthBytes: This argument contains the number of bytes that this method
|
||||||
|
* should process.
|
||||||
|
*/
|
||||||
uint16_t usGenerateChecksum( uint32_t ulSum, const uint8_t * pucNextData, size_t uxDataLengthBytes )
|
uint16_t usGenerateChecksum( uint32_t ulSum, const uint8_t * pucNextData, size_t uxDataLengthBytes )
|
||||||
{
|
{
|
||||||
xUnion32 xSum2, xSum, xTerm;
|
xUnion32 xSum2, xSum, xTerm;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* FreeRTOS+TCP V2.0.3
|
* FreeRTOS+TCP V2.0.7
|
||||||
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
@ -54,18 +54,16 @@ xBoundUDPSocketsList or xBoundTCPSocketsList */
|
||||||
number then, depending on the FreeRTOSIPConfig.h settings, it might be that a
|
number then, depending on the FreeRTOSIPConfig.h settings, it might be that a
|
||||||
port number is automatically generated for the socket. Automatically generated
|
port number is automatically generated for the socket. Automatically generated
|
||||||
port numbers will be between socketAUTO_PORT_ALLOCATION_START_NUMBER and
|
port numbers will be between socketAUTO_PORT_ALLOCATION_START_NUMBER and
|
||||||
0xffff. */
|
0xffff.
|
||||||
/* _HT_ thinks that the default of 0xc000 is pretty high */
|
|
||||||
|
Per https://tools.ietf.org/html/rfc6056, "the dynamic ports consist of the range
|
||||||
|
49152-65535. However, ephemeral port selection algorithms should use the whole
|
||||||
|
range 1024-65535" excluding those already in use (inbound or outbound). */
|
||||||
#if !defined( socketAUTO_PORT_ALLOCATION_START_NUMBER )
|
#if !defined( socketAUTO_PORT_ALLOCATION_START_NUMBER )
|
||||||
#define socketAUTO_PORT_ALLOCATION_START_NUMBER ( ( uint16_t ) 0xc000 )
|
#define socketAUTO_PORT_ALLOCATION_START_NUMBER ( ( uint16_t ) 0x0400 )
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* When the automatically generated port numbers overflow, the next value used
|
#define socketAUTO_PORT_ALLOCATION_MAX_NUMBER ( ( uint16_t ) 0xffff )
|
||||||
is not set back to socketAUTO_PORT_ALLOCATION_START_NUMBER because it is likely
|
|
||||||
that the first few automatically generated ports will still be in use. Instead
|
|
||||||
it is reset back to the value defined by this constant. */
|
|
||||||
#define socketAUTO_PORT_ALLOCATION_RESET_NUMBER ( ( uint16_t ) 0xc100 )
|
|
||||||
#define socketAUTO_PORT_ALLOCATION_MAX_NUMBER ( ( uint16_t ) 0xff00 )
|
|
||||||
|
|
||||||
/* The number of octets that make up an IP address. */
|
/* The number of octets that make up an IP address. */
|
||||||
#define socketMAX_IP_ADDRESS_OCTETS 4u
|
#define socketMAX_IP_ADDRESS_OCTETS 4u
|
||||||
|
@ -165,15 +163,6 @@ List_t xBoundUDPSocketsList;
|
||||||
List_t xBoundTCPSocketsList;
|
List_t xBoundTCPSocketsList;
|
||||||
#endif /* ipconfigUSE_TCP == 1 */
|
#endif /* ipconfigUSE_TCP == 1 */
|
||||||
|
|
||||||
/* Holds the next private port number to use when binding a client socket for
|
|
||||||
UDP, and if ipconfigUSE_TCP is set to 1, also TCP. UDP uses index
|
|
||||||
socketNEXT_UDP_PORT_NUMBER_INDEX and TCP uses index
|
|
||||||
socketNEXT_TCP_PORT_NUMBER_INDEX. The initial value is set to be between
|
|
||||||
socketAUTO_PORT_ALLOCATION_RESET_NUMBER and socketAUTO_PORT_ALLOCATION_MAX_NUMBER
|
|
||||||
when the IP stack is initialised. Note ipconfigRAND32() is used, which must be
|
|
||||||
seeded prior to the IP task being started. */
|
|
||||||
static uint16_t usNextPortToUse[ socketPROTOCOL_COUNT ] = { 0 };
|
|
||||||
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
static BaseType_t prvValidSocket( FreeRTOS_Socket_t *pxSocket, BaseType_t xProtocol, BaseType_t xIsBound )
|
static BaseType_t prvValidSocket( FreeRTOS_Socket_t *pxSocket, BaseType_t xProtocol, BaseType_t xIsBound )
|
||||||
|
@ -199,35 +188,17 @@ BaseType_t xReturn = pdTRUE;
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
void vNetworkSocketsInit( void )
|
BaseType_t vNetworkSocketsInit( void )
|
||||||
{
|
{
|
||||||
const uint32_t ulAutoPortRange = socketAUTO_PORT_ALLOCATION_MAX_NUMBER - socketAUTO_PORT_ALLOCATION_RESET_NUMBER;
|
|
||||||
uint32_t ulRandomPort;
|
|
||||||
|
|
||||||
vListInitialise( &xBoundUDPSocketsList );
|
vListInitialise( &xBoundUDPSocketsList );
|
||||||
|
|
||||||
/* Determine the first anonymous UDP port number to get assigned. Give it
|
|
||||||
a random value in order to avoid confusion about port numbers being used
|
|
||||||
earlier, before rebooting the device. Start with the first auto port
|
|
||||||
number, then add a random offset up to a maximum of the range of numbers. */
|
|
||||||
ulRandomPort = socketAUTO_PORT_ALLOCATION_START_NUMBER;
|
|
||||||
ulRandomPort += ( ipconfigRAND32() % ulAutoPortRange );
|
|
||||||
usNextPortToUse[ socketNEXT_UDP_PORT_NUMBER_INDEX ] = ( uint16_t ) ulRandomPort;
|
|
||||||
|
|
||||||
#if( ipconfigUSE_TCP == 1 )
|
#if( ipconfigUSE_TCP == 1 )
|
||||||
{
|
{
|
||||||
extern uint32_t ulNextInitialSequenceNumber;
|
|
||||||
|
|
||||||
ulNextInitialSequenceNumber = ipconfigRAND32();
|
|
||||||
|
|
||||||
/* Determine the first anonymous TCP port number to get assigned. */
|
|
||||||
ulRandomPort = socketAUTO_PORT_ALLOCATION_START_NUMBER;
|
|
||||||
ulRandomPort += ( ipconfigRAND32() % ulAutoPortRange );
|
|
||||||
usNextPortToUse[ socketNEXT_TCP_PORT_NUMBER_INDEX ] = ( uint16_t ) ulRandomPort;
|
|
||||||
|
|
||||||
vListInitialise( &xBoundTCPSocketsList );
|
vListInitialise( &xBoundTCPSocketsList );
|
||||||
}
|
}
|
||||||
#endif /* ipconfigUSE_TCP == 1 */
|
#endif /* ipconfigUSE_TCP == 1 */
|
||||||
|
|
||||||
|
return pdTRUE;
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
@ -261,6 +232,7 @@ FreeRTOS_Socket_t *pxSocket;
|
||||||
if( xType != FREERTOS_SOCK_DGRAM )
|
if( xType != FREERTOS_SOCK_DGRAM )
|
||||||
{
|
{
|
||||||
xReturn = pdFAIL;
|
xReturn = pdFAIL;
|
||||||
|
configASSERT( xReturn );
|
||||||
}
|
}
|
||||||
/* In case a UDP socket is created, do not allocate space for TCP data. */
|
/* In case a UDP socket is created, do not allocate space for TCP data. */
|
||||||
*pxSocketSize = ( sizeof( *pxSocket ) - sizeof( pxSocket->u ) ) + sizeof( pxSocket->u.xUDP );
|
*pxSocketSize = ( sizeof( *pxSocket ) - sizeof( pxSocket->u ) ) + sizeof( pxSocket->u.xUDP );
|
||||||
|
@ -271,6 +243,7 @@ FreeRTOS_Socket_t *pxSocket;
|
||||||
if( xType != FREERTOS_SOCK_STREAM )
|
if( xType != FREERTOS_SOCK_STREAM )
|
||||||
{
|
{
|
||||||
xReturn = pdFAIL;
|
xReturn = pdFAIL;
|
||||||
|
configASSERT( xReturn );
|
||||||
}
|
}
|
||||||
|
|
||||||
*pxSocketSize = ( sizeof( *pxSocket ) - sizeof( pxSocket->u ) ) + sizeof( pxSocket->u.xTCP );
|
*pxSocketSize = ( sizeof( *pxSocket ) - sizeof( pxSocket->u ) ) + sizeof( pxSocket->u.xTCP );
|
||||||
|
@ -279,6 +252,7 @@ FreeRTOS_Socket_t *pxSocket;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
xReturn = pdFAIL;
|
xReturn = pdFAIL;
|
||||||
|
configASSERT( xReturn );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* In case configASSERT() is not used */
|
/* In case configASSERT() is not used */
|
||||||
|
@ -320,7 +294,7 @@ Socket_t xReturn;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Clear the entire space to avoid nulling individual entries. */
|
/* Clear the entire space to avoid nulling individual entries */
|
||||||
memset( pxSocket, '\0', uxSocketSize );
|
memset( pxSocket, '\0', uxSocketSize );
|
||||||
|
|
||||||
pxSocket->xEventGroup = xEventGroup;
|
pxSocket->xEventGroup = xEventGroup;
|
||||||
|
@ -1017,13 +991,11 @@ List_t *pxSocketList;
|
||||||
{
|
{
|
||||||
/* pxAddress will be NULL if sendto() was called on a socket without the
|
/* pxAddress will be NULL if sendto() was called on a socket without the
|
||||||
socket being bound to an address. In this case, automatically allocate
|
socket being bound to an address. In this case, automatically allocate
|
||||||
an address to the socket. There is a very tiny chance that the allocated
|
an address and port to the socket. */
|
||||||
port will already be in use - if that is the case, then the check below
|
|
||||||
[pxListFindListItemWithValue()] will result in an error being returned. */
|
|
||||||
if( pxAddress == NULL )
|
if( pxAddress == NULL )
|
||||||
{
|
{
|
||||||
pxAddress = &xAddress;
|
pxAddress = &xAddress;
|
||||||
/* For now, put it to zero, will be assigned later */
|
/* Put the port to zero to be assigned later. */
|
||||||
pxAddress->sin_port = 0u;
|
pxAddress->sin_port = 0u;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1037,7 +1009,11 @@ List_t *pxSocketList;
|
||||||
{
|
{
|
||||||
if( pxAddress->sin_port == 0u )
|
if( pxAddress->sin_port == 0u )
|
||||||
{
|
{
|
||||||
pxAddress->sin_port = prvGetPrivatePortNumber( ( BaseType_t ) pxSocket->ucProtocol );
|
pxAddress->sin_port = prvGetPrivatePortNumber( ( BaseType_t )pxSocket->ucProtocol );
|
||||||
|
if( 0 == pxAddress->sin_port )
|
||||||
|
{
|
||||||
|
return -pdFREERTOS_ERRNO_EADDRNOTAVAIL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If vSocketBind() is called from the API FreeRTOS_bind() it has been
|
/* If vSocketBind() is called from the API FreeRTOS_bind() it has been
|
||||||
|
@ -1524,7 +1500,7 @@ FreeRTOS_Socket_t *pxSocket;
|
||||||
if( pxSocket->u.xTCP.xTCPWindow.u.bits.bHasInit != pdFALSE_UNSIGNED )
|
if( pxSocket->u.xTCP.xTCPWindow.u.bits.bHasInit != pdFALSE_UNSIGNED )
|
||||||
{
|
{
|
||||||
pxSocket->u.xTCP.xTCPWindow.xSize.ulRxWindowLength = pxSocket->u.xTCP.uxRxWinSize * pxSocket->u.xTCP.usInitMSS;
|
pxSocket->u.xTCP.xTCPWindow.xSize.ulRxWindowLength = pxSocket->u.xTCP.uxRxWinSize * pxSocket->u.xTCP.usInitMSS;
|
||||||
pxSocket->u.xTCP.xTCPWindow.xSize.ulRxWindowLength = pxSocket->u.xTCP.uxTxWinSize * pxSocket->u.xTCP.usInitMSS;
|
pxSocket->u.xTCP.xTCPWindow.xSize.ulTxWindowLength = pxSocket->u.xTCP.uxTxWinSize * pxSocket->u.xTCP.usInitMSS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1631,54 +1607,77 @@ FreeRTOS_Socket_t *pxSocket;
|
||||||
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
/* Get a free private ('anonymous') port number */
|
/* Find an available port number per https://tools.ietf.org/html/rfc6056. */
|
||||||
static uint16_t prvGetPrivatePortNumber( BaseType_t xProtocol )
|
static uint16_t prvGetPrivatePortNumber( BaseType_t xProtocol )
|
||||||
{
|
{
|
||||||
uint16_t usResult;
|
const uint16_t usEphemeralPortCount =
|
||||||
BaseType_t xIndex;
|
socketAUTO_PORT_ALLOCATION_MAX_NUMBER - socketAUTO_PORT_ALLOCATION_START_NUMBER + 1;
|
||||||
|
uint16_t usIterations = usEphemeralPortCount;
|
||||||
|
uint32_t ulRandomSeed = 0;
|
||||||
|
uint16_t usResult = 0;
|
||||||
|
BaseType_t xGotZeroOnce = pdFALSE;
|
||||||
const List_t *pxList;
|
const List_t *pxList;
|
||||||
|
|
||||||
#if ipconfigUSE_TCP == 1
|
#if ipconfigUSE_TCP == 1
|
||||||
if( xProtocol == ( BaseType_t ) FREERTOS_IPPROTO_TCP )
|
if( xProtocol == ( BaseType_t ) FREERTOS_IPPROTO_TCP )
|
||||||
{
|
{
|
||||||
xIndex = socketNEXT_TCP_PORT_NUMBER_INDEX;
|
|
||||||
pxList = &xBoundTCPSocketsList;
|
pxList = &xBoundTCPSocketsList;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
xIndex = socketNEXT_UDP_PORT_NUMBER_INDEX;
|
|
||||||
pxList = &xBoundUDPSocketsList;
|
pxList = &xBoundUDPSocketsList;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Avoid compiler warnings if ipconfigUSE_TCP is not defined. */
|
/* Avoid compiler warnings if ipconfigUSE_TCP is not defined. */
|
||||||
( void ) xProtocol;
|
( void ) xProtocol;
|
||||||
|
|
||||||
/* Assign the next port in the range. Has it overflowed? */
|
/* Find the next available port using the random seed as a starting
|
||||||
/*_RB_ This needs to be randomised rather than sequential. */
|
point. */
|
||||||
/* _HT_ Agreed, although many OS's use sequential port numbers, see
|
do
|
||||||
https://www.cymru.com/jtk/misc/ephemeralports.html */
|
|
||||||
for ( ;; )
|
|
||||||
{
|
{
|
||||||
++( usNextPortToUse[ xIndex ] );
|
/* Generate a random seed. */
|
||||||
|
ulRandomSeed = ipconfigRAND32( );
|
||||||
|
|
||||||
if( usNextPortToUse[ xIndex ] >= socketAUTO_PORT_ALLOCATION_MAX_NUMBER )
|
/* Only proceed if the random number generator succeeded. */
|
||||||
|
if( 0 == ulRandomSeed )
|
||||||
{
|
{
|
||||||
/* Don't go right back to the start of the dynamic/private port
|
if( pdFALSE == xGotZeroOnce )
|
||||||
range numbers as any persistent sockets are likely to have been
|
{
|
||||||
create first so the early port numbers may still be in use. */
|
xGotZeroOnce = pdTRUE;
|
||||||
usNextPortToUse[ xIndex ] = socketAUTO_PORT_ALLOCATION_RESET_NUMBER;
|
continue;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
usResult = FreeRTOS_htons( usNextPortToUse[ xIndex ] );
|
|
||||||
|
|
||||||
if( pxListFindListItemWithValue( pxList, ( TickType_t ) usResult ) == NULL )
|
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Map the random to a candidate port. */
|
||||||
|
usResult =
|
||||||
|
socketAUTO_PORT_ALLOCATION_START_NUMBER +
|
||||||
|
( ( ( uint16_t )ulRandomSeed ) % usEphemeralPortCount );
|
||||||
|
|
||||||
|
/* Check if there's already an open socket with the same protocol
|
||||||
|
and port. */
|
||||||
|
if( NULL == pxListFindListItemWithValue(
|
||||||
|
pxList,
|
||||||
|
( TickType_t )FreeRTOS_htons( usResult ) ) )
|
||||||
|
{
|
||||||
|
usResult = FreeRTOS_htons( usResult );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
usResult = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
usIterations--;
|
||||||
|
}
|
||||||
|
while( usIterations > 0 );
|
||||||
|
|
||||||
return usResult;
|
return usResult;
|
||||||
} /* Tested */
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
/* pxListFindListItemWithValue: find a list item in a bound socket list
|
/* pxListFindListItemWithValue: find a list item in a bound socket list
|
||||||
|
@ -1889,7 +1888,7 @@ void vSocketWakeUpUser( FreeRTOS_Socket_t *pxSocket )
|
||||||
/* This define makes it possible for network-card drivers to inspect
|
/* This define makes it possible for network-card drivers to inspect
|
||||||
* UDP message and see if there is any UDP socket bound to a given port
|
* UDP message and see if there is any UDP socket bound to a given port
|
||||||
* number.
|
* number.
|
||||||
* This is probably only useful in systems with a minimum of RAM and
|
* This is probably only usefull in systems with a minimum of RAM and
|
||||||
* when lots of anonymous broadcast messages come in
|
* when lots of anonymous broadcast messages come in
|
||||||
*/
|
*/
|
||||||
BaseType_t xPortHasUDPSocket( uint16_t usPortNr )
|
BaseType_t xPortHasUDPSocket( uint16_t usPortNr )
|
||||||
|
@ -2374,9 +2373,7 @@ void vSocketWakeUpUser( FreeRTOS_Socket_t *pxSocket )
|
||||||
{
|
{
|
||||||
xResult = -pdFREERTOS_ERRNO_ENOMEM;
|
xResult = -pdFREERTOS_ERRNO_ENOMEM;
|
||||||
}
|
}
|
||||||
else if( ( pxSocket->u.xTCP.ucTCPState == eCLOSED ) ||
|
else if( pxSocket->u.xTCP.ucTCPState == eCLOSED )
|
||||||
( pxSocket->u.xTCP.ucTCPState == eCLOSE_WAIT ) ||
|
|
||||||
( pxSocket->u.xTCP.ucTCPState == eCLOSING ) )
|
|
||||||
{
|
{
|
||||||
xResult = -pdFREERTOS_ERRNO_ENOTCONN;
|
xResult = -pdFREERTOS_ERRNO_ENOTCONN;
|
||||||
}
|
}
|
||||||
|
@ -2875,7 +2872,7 @@ void vSocketWakeUpUser( FreeRTOS_Socket_t *pxSocket )
|
||||||
|
|
||||||
#if( ipconfigUSE_TCP == 1 )
|
#if( ipconfigUSE_TCP == 1 )
|
||||||
|
|
||||||
static StreamBuffer_t *prvTCPCreateStream( FreeRTOS_Socket_t *pxSocket, BaseType_t xIsInputStream )
|
static StreamBuffer_t *prvTCPCreateStream ( FreeRTOS_Socket_t *pxSocket, BaseType_t xIsInputStream )
|
||||||
{
|
{
|
||||||
StreamBuffer_t *pxBuffer;
|
StreamBuffer_t *pxBuffer;
|
||||||
size_t uxLength;
|
size_t uxLength;
|
||||||
|
@ -2885,26 +2882,11 @@ void vSocketWakeUpUser( FreeRTOS_Socket_t *pxSocket )
|
||||||
creation, it could still be changed with setsockopt(). */
|
creation, it could still be changed with setsockopt(). */
|
||||||
if( xIsInputStream != pdFALSE )
|
if( xIsInputStream != pdFALSE )
|
||||||
{
|
{
|
||||||
/* Flow control for input streams works with a low- and a high-water mark.
|
|
||||||
1) If the RX-space becomes less than uxLittleSpace, the flag 'bLowWater' will
|
|
||||||
be set, and a TCP window update message will be sent to the peer.
|
|
||||||
2) The data will be read from the socket by recv() and when RX-space becomes
|
|
||||||
larger than or equal to than 'uxEnoughSpace', a new TCP window update
|
|
||||||
message will be sent to the peer, and 'bLowWater' will get cleared again.
|
|
||||||
By default:
|
|
||||||
uxLittleSpace == 1/5 x uxRxStreamSize
|
|
||||||
uxEnoughSpace == 4/5 x uxRxStreamSize
|
|
||||||
How-ever it is very inefficient to make 'uxLittleSpace' smaller than the actual MSS.
|
|
||||||
*/
|
|
||||||
uxLength = pxSocket->u.xTCP.uxRxStreamSize;
|
uxLength = pxSocket->u.xTCP.uxRxStreamSize;
|
||||||
|
|
||||||
if( pxSocket->u.xTCP.uxLittleSpace == 0ul )
|
if( pxSocket->u.xTCP.uxLittleSpace == 0ul )
|
||||||
{
|
{
|
||||||
pxSocket->u.xTCP.uxLittleSpace = ( 1ul * pxSocket->u.xTCP.uxRxStreamSize ) / 5u; /*_RB_ Why divide by 5? Can this be changed to a #define? */
|
pxSocket->u.xTCP.uxLittleSpace = ( 1ul * pxSocket->u.xTCP.uxRxStreamSize ) / 5u; /*_RB_ Why divide by 5? Can this be changed to a #define? */
|
||||||
if( ( pxSocket->u.xTCP.uxLittleSpace < pxSocket->u.xTCP.usCurMSS ) && ( pxSocket->u.xTCP.uxRxStreamSize >= 2u * pxSocket->u.xTCP.usCurMSS ) )
|
|
||||||
{
|
|
||||||
pxSocket->u.xTCP.uxLittleSpace = pxSocket->u.xTCP.usCurMSS;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if( pxSocket->u.xTCP.uxEnoughSpace == 0ul )
|
if( pxSocket->u.xTCP.uxEnoughSpace == 0ul )
|
||||||
|
@ -3047,11 +3029,9 @@ void vSocketWakeUpUser( FreeRTOS_Socket_t *pxSocket )
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( pxSocket->u.xTCP.pxHandleReceive( (Socket_t *)pxSocket, ( void* )ucReadPtr, ( size_t ) ulCount ) != pdFALSE )
|
pxSocket->u.xTCP.pxHandleReceive( (Socket_t *)pxSocket, ( void* )ucReadPtr, ( size_t ) ulCount );
|
||||||
{
|
|
||||||
uxStreamBufferGet( pxStream, 0ul, NULL, ( size_t ) ulCount, pdFALSE );
|
uxStreamBufferGet( pxStream, 0ul, NULL, ( size_t ) ulCount, pdFALSE );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
} else
|
} else
|
||||||
#endif /* ipconfigUSE_CALLBACKS */
|
#endif /* ipconfigUSE_CALLBACKS */
|
||||||
{
|
{
|
||||||
|
@ -3378,12 +3358,13 @@ void vSocketWakeUpUser( FreeRTOS_Socket_t *pxSocket )
|
||||||
char ucChildText[16] = "";
|
char ucChildText[16] = "";
|
||||||
if (pxSocket->u.xTCP.ucTCPState == eTCP_LISTEN)
|
if (pxSocket->u.xTCP.ucTCPState == eTCP_LISTEN)
|
||||||
{
|
{
|
||||||
snprintf( ucChildText, sizeof( ucChildText ), " %d/%d",
|
const int32_t copied_len = snprintf( ucChildText, sizeof( ucChildText ), " %d/%d",
|
||||||
pxSocket->u.xTCP.usChildCount,
|
( int ) pxSocket->u.xTCP.usChildCount,
|
||||||
pxSocket->u.xTCP.usBacklog);
|
( int ) pxSocket->u.xTCP.usBacklog);
|
||||||
|
/* These should never evaluate to false since the buffers are both shorter than 5-6 characters (<=65535) */
|
||||||
|
configASSERT( copied_len >= 0 );
|
||||||
|
configASSERT( copied_len < sizeof( ucChildText ) );
|
||||||
}
|
}
|
||||||
if( age > 999999 )
|
|
||||||
age = 999999;
|
|
||||||
FreeRTOS_printf( ( "TCP %5d %-16lxip:%5d %d/%d %-13.13s %6lu %6u%s\n",
|
FreeRTOS_printf( ( "TCP %5d %-16lxip:%5d %d/%d %-13.13s %6lu %6u%s\n",
|
||||||
pxSocket->usLocalPort, /* Local port on this machine */
|
pxSocket->usLocalPort, /* Local port on this machine */
|
||||||
pxSocket->u.xTCP.ulRemoteIP, /* IP address of remote machine */
|
pxSocket->u.xTCP.ulRemoteIP, /* IP address of remote machine */
|
||||||
|
@ -3391,7 +3372,7 @@ void vSocketWakeUpUser( FreeRTOS_Socket_t *pxSocket )
|
||||||
pxSocket->u.xTCP.rxStream != NULL,
|
pxSocket->u.xTCP.rxStream != NULL,
|
||||||
pxSocket->u.xTCP.txStream != NULL,
|
pxSocket->u.xTCP.txStream != NULL,
|
||||||
FreeRTOS_GetTCPStateName( pxSocket->u.xTCP.ucTCPState ),
|
FreeRTOS_GetTCPStateName( pxSocket->u.xTCP.ucTCPState ),
|
||||||
age,
|
(age > 999999 ? 999999 : age), /* Format 'age' for printing */
|
||||||
pxSocket->u.xTCP.usTimeout,
|
pxSocket->u.xTCP.usTimeout,
|
||||||
ucChildText ) );
|
ucChildText ) );
|
||||||
/* Remove compiler warnings if FreeRTOS_debug_printf() is not defined. */
|
/* Remove compiler warnings if FreeRTOS_debug_printf() is not defined. */
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* FreeRTOS+TCP V2.0.3
|
* FreeRTOS+TCP V2.0.7
|
||||||
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* FreeRTOS+TCP V2.0.3
|
* FreeRTOS+TCP V2.0.7
|
||||||
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
@ -61,7 +61,7 @@
|
||||||
|
|
||||||
/* This compile-time test was moved to here because some macro's
|
/* This compile-time test was moved to here because some macro's
|
||||||
were unknown within 'FreeRTOSIPConfigDefaults.h'. It tests whether
|
were unknown within 'FreeRTOSIPConfigDefaults.h'. It tests whether
|
||||||
the defined MTU size can contain at ;east a complete TCP packet. */
|
the defined MTU size can contain at least a complete TCP packet. */
|
||||||
|
|
||||||
#if ( ( ipconfigTCP_MSS + ipSIZE_OF_IPv4_HEADER + ipSIZE_OF_TCP_HEADER ) > ipconfigNETWORK_MTU )
|
#if ( ( ipconfigTCP_MSS + ipSIZE_OF_IPv4_HEADER + ipSIZE_OF_TCP_HEADER ) > ipconfigNETWORK_MTU )
|
||||||
#error The ipconfigTCP_MSS setting in FreeRTOSIPConfig.h is too large.
|
#error The ipconfigTCP_MSS setting in FreeRTOSIPConfig.h is too large.
|
||||||
|
@ -137,13 +137,6 @@ the defined MTU size can contain at ;east a complete TCP packet. */
|
||||||
*/
|
*/
|
||||||
#define REDUCED_MSS_THROUGH_INTERNET ( 1400 )
|
#define REDUCED_MSS_THROUGH_INTERNET ( 1400 )
|
||||||
|
|
||||||
/*
|
|
||||||
* Each time a new TCP connection is being made, a new Initial Sequence Number shall be used.
|
|
||||||
* The variable 'ulNextInitialSequenceNumber' will be incremented with a recommended value
|
|
||||||
* of 0x102.
|
|
||||||
*/
|
|
||||||
#define INITIAL_SEQUENCE_NUMBER_INCREMENT ( 0x102UL )
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* When there are no TCP options, the TCP offset equals 20 bytes, which is stored as
|
* When there are no TCP options, the TCP offset equals 20 bytes, which is stored as
|
||||||
* the number 5 (words) in the higher niblle of the TCP-offset byte.
|
* the number 5 (words) in the higher niblle of the TCP-offset byte.
|
||||||
|
@ -269,10 +262,6 @@ static void prvTCPAddTxData( FreeRTOS_Socket_t *pxSocket );
|
||||||
*/
|
*/
|
||||||
static BaseType_t prvTCPHandleFin( FreeRTOS_Socket_t *pxSocket, NetworkBufferDescriptor_t *pxNetworkBuffer );
|
static BaseType_t prvTCPHandleFin( FreeRTOS_Socket_t *pxSocket, NetworkBufferDescriptor_t *pxNetworkBuffer );
|
||||||
|
|
||||||
#if( ipconfigUSE_TCP_TIMESTAMPS == 1 )
|
|
||||||
static UBaseType_t prvTCPSetTimeStamp( BaseType_t lOffset, FreeRTOS_Socket_t *pxSocket, TCPHeader_t *pxTCPHeader );
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Called from prvTCPHandleState(). Find the TCP payload data and check and
|
* Called from prvTCPHandleState(). Find the TCP payload data and check and
|
||||||
* return its length.
|
* return its length.
|
||||||
|
@ -360,12 +349,14 @@ static NetworkBufferDescriptor_t *prvTCPBufferResize( FreeRTOS_Socket_t *pxSocke
|
||||||
static uint8_t prvWinScaleFactor( FreeRTOS_Socket_t *pxSocket );
|
static uint8_t prvWinScaleFactor( FreeRTOS_Socket_t *pxSocket );
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*-----------------------------------------------------------*/
|
/*
|
||||||
|
* Generate a randomized TCP Initial Sequence Number per RFC.
|
||||||
/* Initial Sequence Number, i.e. the next initial sequence number that will be
|
*/
|
||||||
used when a new connection is opened. The value should be randomized to prevent
|
extern uint32_t ulApplicationGetNextSequenceNumber(
|
||||||
attacks from outside (spoofing). */
|
uint32_t ulSourceAddress,
|
||||||
uint32_t ulNextInitialSequenceNumber = 0ul;
|
uint16_t usSourcePort,
|
||||||
|
uint32_t ulDestinationAddress,
|
||||||
|
uint16_t usDestinationPort );
|
||||||
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
@ -480,11 +471,11 @@ BaseType_t xReady = pdFALSE;
|
||||||
if( ( pxSocket->u.xTCP.ucTCPState >= eESTABLISHED ) && ( pxSocket->u.xTCP.txStream != NULL ) )
|
if( ( pxSocket->u.xTCP.ucTCPState >= eESTABLISHED ) && ( pxSocket->u.xTCP.txStream != NULL ) )
|
||||||
{
|
{
|
||||||
/* The API FreeRTOS_send() might have added data to the TX stream. Add
|
/* The API FreeRTOS_send() might have added data to the TX stream. Add
|
||||||
this data to the windowing system so it can be transmitted. */
|
this data to the windowing system to it can be transmitted. */
|
||||||
prvTCPAddTxData( pxSocket );
|
prvTCPAddTxData( pxSocket );
|
||||||
}
|
}
|
||||||
|
|
||||||
#if( ipconfigUSE_TCP_WIN == 1 )
|
#if ipconfigUSE_TCP_WIN == 1
|
||||||
{
|
{
|
||||||
if( pxSocket->u.xTCP.pxAckMessage != NULL )
|
if( pxSocket->u.xTCP.pxAckMessage != NULL )
|
||||||
{
|
{
|
||||||
|
@ -577,7 +568,7 @@ NetworkBufferDescriptor_t *pxNetworkBuffer;
|
||||||
|
|
||||||
if( pxSocket->u.xTCP.ucTCPState != eCONNECT_SYN )
|
if( pxSocket->u.xTCP.ucTCPState != eCONNECT_SYN )
|
||||||
{
|
{
|
||||||
/* The connection is in a state other than SYN. */
|
/* The connection is in s state other than SYN. */
|
||||||
pxNetworkBuffer = NULL;
|
pxNetworkBuffer = NULL;
|
||||||
|
|
||||||
/* prvTCPSendRepeated() will only create a network buffer if necessary,
|
/* prvTCPSendRepeated() will only create a network buffer if necessary,
|
||||||
|
@ -609,18 +600,6 @@ NetworkBufferDescriptor_t *pxNetworkBuffer;
|
||||||
the Ethernet address of the peer or the gateway is found. */
|
the Ethernet address of the peer or the gateway is found. */
|
||||||
pxTCPPacket = ( TCPPacket_t * )pxSocket->u.xTCP.xPacket.u.ucLastPacket;
|
pxTCPPacket = ( TCPPacket_t * )pxSocket->u.xTCP.xPacket.u.ucLastPacket;
|
||||||
|
|
||||||
#if( ipconfigUSE_TCP_TIMESTAMPS == 1 )
|
|
||||||
{
|
|
||||||
/* When TCP time stamps are enabled, but they will only be applied
|
|
||||||
if the peer is outside the netmask, usually on the internet.
|
|
||||||
Packages sent on a LAN are usually too big to carry time stamps. */
|
|
||||||
if( ( ( pxSocket->u.xTCP.ulRemoteIP ^ FreeRTOS_ntohl( *ipLOCAL_IP_ADDRESS_POINTER ) ) & xNetworkAddressing.ulNetMask ) != 0ul )
|
|
||||||
{
|
|
||||||
pxSocket->u.xTCP.xTCPWindow.u.bits.bTimeStamps = pdTRUE_UNSIGNED;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* About to send a SYN packet. Call prvSetSynAckOptions() to set
|
/* About to send a SYN packet. Call prvSetSynAckOptions() to set
|
||||||
the proper options: The size of MSS and whether SACK's are
|
the proper options: The size of MSS and whether SACK's are
|
||||||
allowed. */
|
allowed. */
|
||||||
|
@ -707,12 +686,15 @@ NetworkBufferDescriptor_t xTempBuffer;
|
||||||
|
|
||||||
if( pxNetworkBuffer == NULL )
|
if( pxNetworkBuffer == NULL )
|
||||||
{
|
{
|
||||||
memset( &xTempBuffer, '\0', sizeof( xTempBuffer ) );
|
|
||||||
pxNetworkBuffer = &xTempBuffer;
|
pxNetworkBuffer = &xTempBuffer;
|
||||||
|
|
||||||
|
#if( ipconfigUSE_LINKED_RX_MESSAGES != 0 )
|
||||||
|
{
|
||||||
|
xTempBuffer.pxNextBuffer = NULL;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
xTempBuffer.pucEthernetBuffer = pxSocket->u.xTCP.xPacket.u.ucLastPacket;
|
xTempBuffer.pucEthernetBuffer = pxSocket->u.xTCP.xPacket.u.ucLastPacket;
|
||||||
xTempBuffer.xDataLength = sizeof( pxSocket->u.xTCP.xPacket.u.ucLastPacket );
|
xTempBuffer.xDataLength = sizeof( pxSocket->u.xTCP.xPacket.u.ucLastPacket );
|
||||||
/* A pseudo network buffer can not be released. */
|
|
||||||
xReleaseAfterSend = pdFALSE;
|
xReleaseAfterSend = pdFALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -903,7 +885,7 @@ NetworkBufferDescriptor_t xTempBuffer;
|
||||||
pxIPHeader->usHeaderChecksum = ~FreeRTOS_htons( pxIPHeader->usHeaderChecksum );
|
pxIPHeader->usHeaderChecksum = ~FreeRTOS_htons( pxIPHeader->usHeaderChecksum );
|
||||||
|
|
||||||
/* calculate the TCP checksum for an outgoing packet. */
|
/* calculate the TCP checksum for an outgoing packet. */
|
||||||
usGenerateProtocolChecksum( (uint8_t*)pxTCPPacket, pdTRUE );
|
usGenerateProtocolChecksum( (uint8_t*)pxTCPPacket, pxNetworkBuffer->xDataLength, pdTRUE );
|
||||||
|
|
||||||
/* A calculated checksum of 0 must be inverted as 0 means the checksum
|
/* A calculated checksum of 0 must be inverted as 0 means the checksum
|
||||||
is disabled. */
|
is disabled. */
|
||||||
|
@ -915,9 +897,7 @@ NetworkBufferDescriptor_t xTempBuffer;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if( ipconfigUSE_LINKED_RX_MESSAGES != 0 )
|
#if( ipconfigUSE_LINKED_RX_MESSAGES != 0 )
|
||||||
{
|
|
||||||
pxNetworkBuffer->pxNextBuffer = NULL;
|
pxNetworkBuffer->pxNextBuffer = NULL;
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Important: tell NIC driver how many bytes must be sent. */
|
/* Important: tell NIC driver how many bytes must be sent. */
|
||||||
|
@ -928,7 +908,7 @@ NetworkBufferDescriptor_t xTempBuffer;
|
||||||
sizeof( pxEthernetHeader->xDestinationAddress ) );
|
sizeof( pxEthernetHeader->xDestinationAddress ) );
|
||||||
|
|
||||||
/* The source MAC addresses is fixed to 'ipLOCAL_MAC_ADDRESS'. */
|
/* The source MAC addresses is fixed to 'ipLOCAL_MAC_ADDRESS'. */
|
||||||
memcpy( ( void * ) &( pxEthernetHeader->xSourceAddress ), ( void * ) ipLOCAL_MAC_ADDRESS, ( size_t ) ipMAC_ADDRESS_LENGTH_BYTES );
|
memcpy( ( void * ) &( pxEthernetHeader->xSourceAddress) , ( void * ) ipLOCAL_MAC_ADDRESS, ( size_t ) ipMAC_ADDRESS_LENGTH_BYTES );
|
||||||
|
|
||||||
#if defined( ipconfigETHERNET_MINIMUM_PACKET_BYTES )
|
#if defined( ipconfigETHERNET_MINIMUM_PACKET_BYTES )
|
||||||
{
|
{
|
||||||
|
@ -1002,6 +982,7 @@ eARPLookupResult_t eReturned;
|
||||||
uint32_t ulRemoteIP;
|
uint32_t ulRemoteIP;
|
||||||
MACAddress_t xEthAddress;
|
MACAddress_t xEthAddress;
|
||||||
BaseType_t xReturn = pdTRUE;
|
BaseType_t xReturn = pdTRUE;
|
||||||
|
uint32_t ulInitialSequenceNumber = 0;
|
||||||
|
|
||||||
#if( ipconfigHAS_PRINTF != 0 )
|
#if( ipconfigHAS_PRINTF != 0 )
|
||||||
{
|
{
|
||||||
|
@ -1040,7 +1021,22 @@ BaseType_t xReturn = pdTRUE;
|
||||||
FreeRTOS_OutputARPRequest( ulRemoteIP );
|
FreeRTOS_OutputARPRequest( ulRemoteIP );
|
||||||
|
|
||||||
xReturn = pdFALSE;
|
xReturn = pdFALSE;
|
||||||
break;
|
}
|
||||||
|
|
||||||
|
if( xReturn != pdFALSE )
|
||||||
|
{
|
||||||
|
/* Get a difficult-to-predict initial sequence number for this 4-tuple. */
|
||||||
|
ulInitialSequenceNumber = ulApplicationGetNextSequenceNumber(
|
||||||
|
*ipLOCAL_IP_ADDRESS_POINTER,
|
||||||
|
pxSocket->usLocalPort,
|
||||||
|
pxSocket->u.xTCP.ulRemoteIP,
|
||||||
|
pxSocket->u.xTCP.usRemotePort );
|
||||||
|
|
||||||
|
/* Check for a random number generation error. */
|
||||||
|
if( 0 == ulInitialSequenceNumber )
|
||||||
|
{
|
||||||
|
xReturn = pdFALSE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if( xReturn != pdFALSE )
|
if( xReturn != pdFALSE )
|
||||||
|
@ -1050,10 +1046,10 @@ BaseType_t xReturn = pdTRUE;
|
||||||
pxTCPPacket = ( TCPPacket_t * )pxSocket->u.xTCP.xPacket.u.ucLastPacket;
|
pxTCPPacket = ( TCPPacket_t * )pxSocket->u.xTCP.xPacket.u.ucLastPacket;
|
||||||
pxIPHeader = &pxTCPPacket->xIPHeader;
|
pxIPHeader = &pxTCPPacket->xIPHeader;
|
||||||
|
|
||||||
/* Reset the retry counter to zero... */
|
/* reset the retry counter to zero. */
|
||||||
pxSocket->u.xTCP.ucRepCount = 0u;
|
pxSocket->u.xTCP.ucRepCount = 0u;
|
||||||
|
|
||||||
/* ...and remember that the connect/SYN data are prepared. */
|
/* And remember that the connect/SYN data are prepared. */
|
||||||
pxSocket->u.xTCP.bits.bConnPrepared = pdTRUE_UNSIGNED;
|
pxSocket->u.xTCP.bits.bConnPrepared = pdTRUE_UNSIGNED;
|
||||||
|
|
||||||
/* Now that the Ethernet address is known, the initial packet can be
|
/* Now that the Ethernet address is known, the initial packet can be
|
||||||
|
@ -1086,11 +1082,7 @@ BaseType_t xReturn = pdTRUE;
|
||||||
pxSocket->u.xTCP.xTCPWindow.rx.ulCurrentSequenceNumber = 0ul;
|
pxSocket->u.xTCP.xTCPWindow.rx.ulCurrentSequenceNumber = 0ul;
|
||||||
|
|
||||||
/* Start with ISN (Initial Sequence Number). */
|
/* Start with ISN (Initial Sequence Number). */
|
||||||
pxSocket->u.xTCP.xTCPWindow.ulOurSequenceNumber = ulNextInitialSequenceNumber;
|
pxSocket->u.xTCP.xTCPWindow.ulOurSequenceNumber = ulInitialSequenceNumber;
|
||||||
|
|
||||||
/* And increment it with 268 for the next new connection, which is
|
|
||||||
recommended value. */
|
|
||||||
ulNextInitialSequenceNumber += 0x102UL;
|
|
||||||
|
|
||||||
/* The TCP header size is 20 bytes, divided by 4 equals 5, which is put in
|
/* The TCP header size is 20 bytes, divided by 4 equals 5, which is put in
|
||||||
the high nibble of the TCP offset field. */
|
the high nibble of the TCP offset field. */
|
||||||
|
@ -1160,31 +1152,60 @@ UBaseType_t uxNewMSS;
|
||||||
pucLast = pucPtr + (((pxTCPHeader->ucTCPOffset >> 4) - 5) << 2);
|
pucLast = pucPtr + (((pxTCPHeader->ucTCPOffset >> 4) - 5) << 2);
|
||||||
pxTCPWindow = &pxSocket->u.xTCP.xTCPWindow;
|
pxTCPWindow = &pxSocket->u.xTCP.xTCPWindow;
|
||||||
|
|
||||||
|
/* Validate options size calculation. */
|
||||||
|
if( pucLast > ( pxNetworkBuffer->pucEthernetBuffer + pxNetworkBuffer->xDataLength ) )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* The comparison with pucLast is only necessary in case the option data are
|
/* The comparison with pucLast is only necessary in case the option data are
|
||||||
corrupted, we don't like to run into invalid memory and crash. */
|
corrupted, we don't like to run into invalid memory and crash. */
|
||||||
while( pucPtr < pucLast )
|
while( pucPtr < pucLast )
|
||||||
{
|
{
|
||||||
|
UBaseType_t xRemainingOptionsBytes = pucLast - pucPtr;
|
||||||
|
|
||||||
if( pucPtr[ 0 ] == TCP_OPT_END )
|
if( pucPtr[ 0 ] == TCP_OPT_END )
|
||||||
{
|
{
|
||||||
/* End of options. */
|
/* End of options. */
|
||||||
return;
|
break;
|
||||||
}
|
}
|
||||||
if( pucPtr[ 0 ] == TCP_OPT_NOOP)
|
if( pucPtr[ 0 ] == TCP_OPT_NOOP)
|
||||||
{
|
{
|
||||||
pucPtr++;
|
|
||||||
|
|
||||||
/* NOP option, inserted to make the length a multiple of 4. */
|
/* NOP option, inserted to make the length a multiple of 4. */
|
||||||
|
pucPtr++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Any other well-formed option must be at least two bytes: the option
|
||||||
|
type byte followed by a length byte. */
|
||||||
|
if( xRemainingOptionsBytes < 2 )
|
||||||
|
{
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
#if( ipconfigUSE_TCP_WIN != 0 )
|
#if( ipconfigUSE_TCP_WIN != 0 )
|
||||||
else if( ( pucPtr[ 0 ] == TCP_OPT_WSOPT ) && ( pucPtr[ 1 ] == TCP_OPT_WSOPT_LEN ) )
|
else if( pucPtr[ 0 ] == TCP_OPT_WSOPT )
|
||||||
{
|
{
|
||||||
|
/* Confirm that the option fits in the remaining buffer space. */
|
||||||
|
if( xRemainingOptionsBytes < TCP_OPT_WSOPT_LEN ||
|
||||||
|
pucPtr[ 1 ] != TCP_OPT_WSOPT_LEN )
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
pxSocket->u.xTCP.ucPeerWinScaleFactor = pucPtr[ 2 ];
|
pxSocket->u.xTCP.ucPeerWinScaleFactor = pucPtr[ 2 ];
|
||||||
pxSocket->u.xTCP.bits.bWinScaling = pdTRUE_UNSIGNED;
|
pxSocket->u.xTCP.bits.bWinScaling = pdTRUE_UNSIGNED;
|
||||||
pucPtr += TCP_OPT_WSOPT_LEN;
|
pucPtr += TCP_OPT_WSOPT_LEN;
|
||||||
}
|
}
|
||||||
#endif /* ipconfigUSE_TCP_WIN */
|
#endif /* ipconfigUSE_TCP_WIN */
|
||||||
else if( ( pucPtr[ 0 ] == TCP_OPT_MSS ) && ( pucPtr[ 1 ] == TCP_OPT_MSS_LEN ) )
|
else if( pucPtr[ 0 ] == TCP_OPT_MSS )
|
||||||
{
|
{
|
||||||
|
/* Confirm that the option fits in the remaining buffer space. */
|
||||||
|
if( xRemainingOptionsBytes < TCP_OPT_MSS_LEN ||
|
||||||
|
pucPtr[ 1 ] != TCP_OPT_MSS_LEN )
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
/* An MSS option with the correct option length. FreeRTOS_htons()
|
/* An MSS option with the correct option length. FreeRTOS_htons()
|
||||||
is not needed here because usChar2u16() already returns a host
|
is not needed here because usChar2u16() already returns a host
|
||||||
endian number. */
|
endian number. */
|
||||||
|
@ -1192,6 +1213,12 @@ UBaseType_t uxNewMSS;
|
||||||
|
|
||||||
if( pxSocket->u.xTCP.usInitMSS != uxNewMSS )
|
if( pxSocket->u.xTCP.usInitMSS != uxNewMSS )
|
||||||
{
|
{
|
||||||
|
/* Perform a basic check on the the new MSS. */
|
||||||
|
if( uxNewMSS == 0 )
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
FreeRTOS_debug_printf( ( "MSS change %u -> %lu\n", pxSocket->u.xTCP.usInitMSS, uxNewMSS ) );
|
FreeRTOS_debug_printf( ( "MSS change %u -> %lu\n", pxSocket->u.xTCP.usInitMSS, uxNewMSS ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1225,11 +1252,11 @@ UBaseType_t uxNewMSS;
|
||||||
{
|
{
|
||||||
/* All other options have a length field, so that we easily
|
/* All other options have a length field, so that we easily
|
||||||
can skip past them. */
|
can skip past them. */
|
||||||
int len = ( int )pucPtr[ 1 ];
|
unsigned char len = pucPtr[ 1 ];
|
||||||
if( len == 0 )
|
if( len < 2 || len > xRemainingOptionsBytes )
|
||||||
{
|
{
|
||||||
/* If the length field is zero, the options are malformed
|
/* If the length field is too small or too big, the options are malformed.
|
||||||
and we don't process them further. */
|
Don't process them further. */
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1284,16 +1311,6 @@ UBaseType_t uxNewMSS;
|
||||||
}
|
}
|
||||||
/* len should be 0 by now. */
|
/* len should be 0 by now. */
|
||||||
}
|
}
|
||||||
#if ipconfigUSE_TCP_TIMESTAMPS == 1
|
|
||||||
else if( pucPtr[0] == TCP_OPT_TIMESTAMP )
|
|
||||||
{
|
|
||||||
len -= 2; /* Skip option and length byte. */
|
|
||||||
pucPtr += 2;
|
|
||||||
pxSocket->u.xTCP.xTCPWindow.u.bits.bTimeStamps = pdTRUE_UNSIGNED;
|
|
||||||
pxSocket->u.xTCP.xTCPWindow.rx.ulTimeStamp = ulChar2u32( pucPtr );
|
|
||||||
pxSocket->u.xTCP.xTCPWindow.tx.ulTimeStamp = ulChar2u32( pucPtr + 4 );
|
|
||||||
}
|
|
||||||
#endif /* ipconfigUSE_TCP_TIMESTAMPS == 1 */
|
|
||||||
}
|
}
|
||||||
#endif /* ipconfigUSE_TCP_WIN == 1 */
|
#endif /* ipconfigUSE_TCP_WIN == 1 */
|
||||||
|
|
||||||
|
@ -1370,24 +1387,13 @@ UBaseType_t uxOptionsLength;
|
||||||
return uxOptionsLength;
|
return uxOptionsLength;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
{
|
|
||||||
#if( ipconfigUSE_TCP_TIMESTAMPS == 1 )
|
|
||||||
if( pxSocket->u.xTCP.xTCPWindow.u.bits.bTimeStamps )
|
|
||||||
{
|
|
||||||
uxOptionsLength += prvTCPSetTimeStamp( uxOptionsLength, pxSocket, &pxTCPPacket->xTCPHeader );
|
|
||||||
pxTCPHeader->ucOptdata[ uxOptionsLength + 0 ] = TCP_OPT_SACK_P; /* 4: Sack-Permitted Option. */
|
|
||||||
pxTCPHeader->ucOptdata[ uxOptionsLength + 1 ] = 2u;
|
|
||||||
uxOptionsLength += 2u;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
pxTCPHeader->ucOptdata[ uxOptionsLength + 0 ] = TCP_OPT_NOOP;
|
pxTCPHeader->ucOptdata[ uxOptionsLength + 0 ] = TCP_OPT_NOOP;
|
||||||
pxTCPHeader->ucOptdata[ uxOptionsLength + 1 ] = TCP_OPT_NOOP;
|
pxTCPHeader->ucOptdata[ uxOptionsLength + 1 ] = TCP_OPT_NOOP;
|
||||||
pxTCPHeader->ucOptdata[ uxOptionsLength + 2 ] = TCP_OPT_SACK_P; /* 4: Sack-Permitted Option. */
|
pxTCPHeader->ucOptdata[ uxOptionsLength + 2 ] = TCP_OPT_SACK_P; /* 4: Sack-Permitted Option. */
|
||||||
pxTCPHeader->ucOptdata[ uxOptionsLength + 3 ] = 2; /* 2: length of this option. */
|
pxTCPHeader->ucOptdata[ uxOptionsLength + 3 ] = 2; /* 2: length of this option. */
|
||||||
uxOptionsLength += 4u;
|
uxOptionsLength += 4u;
|
||||||
}
|
|
||||||
return uxOptionsLength; /* bytes, not words. */
|
return uxOptionsLength; /* bytes, not words. */
|
||||||
}
|
}
|
||||||
#endif /* ipconfigUSE_TCP_WIN == 0 */
|
#endif /* ipconfigUSE_TCP_WIN == 0 */
|
||||||
|
@ -1566,7 +1572,7 @@ BaseType_t bAfter = ( BaseType_t ) NOW_CONNECTED( eTCPState ); /* Is it co
|
||||||
/* Fill in the new state. */
|
/* Fill in the new state. */
|
||||||
pxSocket->u.xTCP.ucTCPState = ( uint8_t ) eTCPState;
|
pxSocket->u.xTCP.ucTCPState = ( uint8_t ) eTCPState;
|
||||||
|
|
||||||
/* Touch the alive timers because moving to another state. */
|
/* touch the alive timers because moving to another state. */
|
||||||
prvTCPTouchSocket( pxSocket );
|
prvTCPTouchSocket( pxSocket );
|
||||||
|
|
||||||
#if( ipconfigHAS_DEBUG_PRINTF == 1 )
|
#if( ipconfigHAS_DEBUG_PRINTF == 1 )
|
||||||
|
@ -1621,14 +1627,7 @@ BaseType_t xResize;
|
||||||
( int32_t ) ( ipSIZE_OF_ETH_HEADER + ipSIZE_OF_IPv4_HEADER + ipSIZE_OF_TCP_HEADER + uxOptionsLength ) + lDataLen );
|
( int32_t ) ( ipSIZE_OF_ETH_HEADER + ipSIZE_OF_IPv4_HEADER + ipSIZE_OF_TCP_HEADER + uxOptionsLength ) + lDataLen );
|
||||||
/* In case we were called from a TCP timer event, a buffer must be
|
/* In case we were called from a TCP timer event, a buffer must be
|
||||||
created. Otherwise, test 'xDataLength' of the provided buffer. */
|
created. Otherwise, test 'xDataLength' of the provided buffer. */
|
||||||
if( ( pxNetworkBuffer == NULL ) || ( pxNetworkBuffer->xDataLength < (size_t)lNeeded ) )
|
xResize = ( pxNetworkBuffer == NULL ) || ( pxNetworkBuffer->xDataLength < (size_t)lNeeded );
|
||||||
{
|
|
||||||
xResize = pdTRUE;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
xResize = pdFALSE;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if( xResize != pdFALSE )
|
if( xResize != pdFALSE )
|
||||||
|
@ -1640,6 +1639,9 @@ BaseType_t xResize;
|
||||||
|
|
||||||
if( pxReturn != NULL )
|
if( pxReturn != NULL )
|
||||||
{
|
{
|
||||||
|
/* Set the actual packet size, in case the returned buffer is larger. */
|
||||||
|
pxReturn->xDataLength = lNeeded;
|
||||||
|
|
||||||
/* Copy the existing data to the new created buffer. */
|
/* Copy the existing data to the new created buffer. */
|
||||||
if( pxNetworkBuffer )
|
if( pxNetworkBuffer )
|
||||||
{
|
{
|
||||||
|
@ -1695,8 +1697,8 @@ int32_t lStreamPos;
|
||||||
pucEthernetBuffer = pxSocket->u.xTCP.xPacket.u.ucLastPacket;
|
pucEthernetBuffer = pxSocket->u.xTCP.xPacket.u.ucLastPacket;
|
||||||
}
|
}
|
||||||
|
|
||||||
pxTCPPacket = ( TCPPacket_t * ) pucEthernetBuffer;
|
pxTCPPacket = ( TCPPacket_t * ) ( pucEthernetBuffer );
|
||||||
pxTCPWindow = &( pxSocket->u.xTCP.xTCPWindow );
|
pxTCPWindow = &pxSocket->u.xTCP.xTCPWindow;
|
||||||
lDataLen = 0;
|
lDataLen = 0;
|
||||||
lStreamPos = 0;
|
lStreamPos = 0;
|
||||||
pxTCPPacket->xTCPHeader.ucTCPFlags |= ipTCP_FLAG_ACK;
|
pxTCPPacket->xTCPHeader.ucTCPFlags |= ipTCP_FLAG_ACK;
|
||||||
|
@ -1848,19 +1850,6 @@ int32_t lStreamPos;
|
||||||
pxTCPPacket->xTCPHeader.ucTCPFlags |= ( uint8_t ) ipTCP_FLAG_PSH;
|
pxTCPPacket->xTCPHeader.ucTCPFlags |= ( uint8_t ) ipTCP_FLAG_PSH;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if ipconfigUSE_TCP_TIMESTAMPS == 1
|
|
||||||
{
|
|
||||||
if( uxOptionsLength == 0u )
|
|
||||||
{
|
|
||||||
if( pxSocket->u.xTCP.xTCPWindow.u.bits.bTimeStamps )
|
|
||||||
{
|
|
||||||
TCPPacket_t * pxTCPPacket = ( TCPPacket_t * ) ( pucEthernetBuffer );
|
|
||||||
uxOptionsLength = prvTCPSetTimeStamp( 0, pxSocket, &pxTCPPacket->xTCPHeader );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
lDataLen += ( int32_t ) ( ipSIZE_OF_IPv4_HEADER + ipSIZE_OF_TCP_HEADER + uxOptionsLength );
|
lDataLen += ( int32_t ) ( ipSIZE_OF_IPv4_HEADER + ipSIZE_OF_TCP_HEADER + uxOptionsLength );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1941,9 +1930,9 @@ int32_t lCount, lLength;
|
||||||
/* A txStream has been created already, see if the socket has new data for
|
/* A txStream has been created already, see if the socket has new data for
|
||||||
the sliding window.
|
the sliding window.
|
||||||
|
|
||||||
uxStreamBufferMidSpace() returns the distance between rxHead and rxMid. It
|
uxStreamBufferMidSpace() returns the distance between rxHead and rxMid. It contains new
|
||||||
contains new Tx data which has not been passed to the sliding window yet.
|
Tx data which has not been passed to the sliding window yet. The oldest
|
||||||
The oldest data not-yet-confirmed can be found at rxTail. */
|
data not-yet-confirmed can be found at rxTail. */
|
||||||
lLength = ( int32_t ) uxStreamBufferMidSpace( pxSocket->u.xTCP.txStream );
|
lLength = ( int32_t ) uxStreamBufferMidSpace( pxSocket->u.xTCP.txStream );
|
||||||
|
|
||||||
if( lLength > 0 )
|
if( lLength > 0 )
|
||||||
|
@ -2064,29 +2053,6 @@ uint32_t ulAckNr = FreeRTOS_ntohl( pxTCPHeader->ulAckNr );
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ipconfigUSE_TCP_TIMESTAMPS == 1
|
|
||||||
|
|
||||||
static UBaseType_t prvTCPSetTimeStamp( BaseType_t lOffset, FreeRTOS_Socket_t *pxSocket, TCPHeader_t *pxTCPHeader )
|
|
||||||
{
|
|
||||||
uint32_t ulTimes[2];
|
|
||||||
uint8_t *ucOptdata = &( pxTCPHeader->ucOptdata[ lOffset ] );
|
|
||||||
|
|
||||||
ulTimes[0] = ( xTaskGetTickCount ( ) * 1000u ) / configTICK_RATE_HZ;
|
|
||||||
ulTimes[0] = FreeRTOS_htonl( ulTimes[0] );
|
|
||||||
ulTimes[1] = FreeRTOS_htonl( pxSocket->u.xTCP.xTCPWindow.rx.ulTimeStamp );
|
|
||||||
ucOptdata[0] = ( uint8_t ) TCP_OPT_TIMESTAMP;
|
|
||||||
ucOptdata[1] = ( uint8_t ) TCP_OPT_TIMESTAMP_LEN;
|
|
||||||
memcpy( &(ucOptdata[2] ), ulTimes, 8u );
|
|
||||||
ucOptdata[10] = ( uint8_t ) TCP_OPT_NOOP;
|
|
||||||
ucOptdata[11] = ( uint8_t ) TCP_OPT_NOOP;
|
|
||||||
/* Do not return the same timestamps 2 times. */
|
|
||||||
pxSocket->u.xTCP.xTCPWindow.rx.ulTimeStamp = 0ul;
|
|
||||||
return 12u;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
/*-----------------------------------------------------------*/
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* prvCheckRxData(): called from prvTCPHandleState()
|
* prvCheckRxData(): called from prvTCPHandleState()
|
||||||
*
|
*
|
||||||
|
@ -2279,15 +2245,6 @@ UBaseType_t uxOptionsLength = pxTCPWindow->ucOptionLength;
|
||||||
pxTCPHeader->ucTCPOffset = ( uint8_t )( ( ipSIZE_OF_TCP_HEADER + uxOptionsLength ) << 2 );
|
pxTCPHeader->ucTCPOffset = ( uint8_t )( ( ipSIZE_OF_TCP_HEADER + uxOptionsLength ) << 2 );
|
||||||
}
|
}
|
||||||
|
|
||||||
#if( ipconfigUSE_TCP_TIMESTAMPS == 1 )
|
|
||||||
{
|
|
||||||
if( pxSocket->u.xTCP.xTCPWindow.u.bits.bTimeStamps )
|
|
||||||
{
|
|
||||||
uxOptionsLength += prvTCPSetTimeStamp( uxOptionsLength, pxSocket, pxTCPHeader );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif /* ipconfigUSE_TCP_TIMESTAMPS == 1 */
|
|
||||||
|
|
||||||
return uxOptionsLength;
|
return uxOptionsLength;
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
@ -2941,16 +2898,31 @@ BaseType_t xProcessReceivedTCPPacket( NetworkBufferDescriptor_t *pxNetworkBuffer
|
||||||
{
|
{
|
||||||
FreeRTOS_Socket_t *pxSocket;
|
FreeRTOS_Socket_t *pxSocket;
|
||||||
TCPPacket_t * pxTCPPacket = ( TCPPacket_t * ) ( pxNetworkBuffer->pucEthernetBuffer );
|
TCPPacket_t * pxTCPPacket = ( TCPPacket_t * ) ( pxNetworkBuffer->pucEthernetBuffer );
|
||||||
uint16_t ucTCPFlags = pxTCPPacket->xTCPHeader.ucTCPFlags;
|
uint16_t ucTCPFlags;
|
||||||
uint32_t ulLocalIP = FreeRTOS_htonl( pxTCPPacket->xIPHeader.ulDestinationIPAddress );
|
uint32_t ulLocalIP;
|
||||||
uint16_t xLocalPort = FreeRTOS_htons( pxTCPPacket->xTCPHeader.usDestinationPort );
|
uint16_t xLocalPort;
|
||||||
uint32_t ulRemoteIP = FreeRTOS_htonl( pxTCPPacket->xIPHeader.ulSourceIPAddress );
|
uint32_t ulRemoteIP;
|
||||||
uint16_t xRemotePort = FreeRTOS_htons( pxTCPPacket->xTCPHeader.usSourcePort );
|
uint16_t xRemotePort;
|
||||||
BaseType_t xResult = pdPASS;
|
BaseType_t xResult = pdPASS;
|
||||||
|
|
||||||
|
/* Check for a minimum packet size. */
|
||||||
|
if( pxNetworkBuffer->xDataLength >=
|
||||||
|
ipSIZE_OF_ETH_HEADER + ipSIZE_OF_IPv4_HEADER + ipSIZE_OF_TCP_HEADER )
|
||||||
|
{
|
||||||
|
ucTCPFlags = pxTCPPacket->xTCPHeader.ucTCPFlags;
|
||||||
|
ulLocalIP = FreeRTOS_htonl( pxTCPPacket->xIPHeader.ulDestinationIPAddress );
|
||||||
|
xLocalPort = FreeRTOS_htons( pxTCPPacket->xTCPHeader.usDestinationPort );
|
||||||
|
ulRemoteIP = FreeRTOS_htonl( pxTCPPacket->xIPHeader.ulSourceIPAddress );
|
||||||
|
xRemotePort = FreeRTOS_htons( pxTCPPacket->xTCPHeader.usSourcePort );
|
||||||
|
|
||||||
/* Find the destination socket, and if not found: return a socket listing to
|
/* Find the destination socket, and if not found: return a socket listing to
|
||||||
the destination PORT. */
|
the destination PORT. */
|
||||||
pxSocket = ( FreeRTOS_Socket_t * ) pxTCPSocketLookup( ulLocalIP, xLocalPort, ulRemoteIP, xRemotePort );
|
pxSocket = ( FreeRTOS_Socket_t * )pxTCPSocketLookup( ulLocalIP, xLocalPort, ulRemoteIP, xRemotePort );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return pdFAIL;
|
||||||
|
}
|
||||||
|
|
||||||
if( ( pxSocket == NULL ) || ( prvTCPSocketIsActive( ( UBaseType_t ) pxSocket->u.xTCP.ucTCPState ) == pdFALSE ) )
|
if( ( pxSocket == NULL ) || ( prvTCPSocketIsActive( ( UBaseType_t ) pxSocket->u.xTCP.ucTCPState ) == pdFALSE ) )
|
||||||
{
|
{
|
||||||
|
@ -3111,10 +3083,21 @@ BaseType_t xResult = pdPASS;
|
||||||
static FreeRTOS_Socket_t *prvHandleListen( FreeRTOS_Socket_t *pxSocket, NetworkBufferDescriptor_t *pxNetworkBuffer )
|
static FreeRTOS_Socket_t *prvHandleListen( FreeRTOS_Socket_t *pxSocket, NetworkBufferDescriptor_t *pxNetworkBuffer )
|
||||||
{
|
{
|
||||||
TCPPacket_t * pxTCPPacket = ( TCPPacket_t * ) ( pxNetworkBuffer->pucEthernetBuffer );
|
TCPPacket_t * pxTCPPacket = ( TCPPacket_t * ) ( pxNetworkBuffer->pucEthernetBuffer );
|
||||||
FreeRTOS_Socket_t *pxReturn;
|
FreeRTOS_Socket_t *pxReturn = NULL;
|
||||||
|
uint32_t ulInitialSequenceNumber;
|
||||||
|
|
||||||
|
/* Assume that a new Initial Sequence Number will be required. Request
|
||||||
|
it now in order to fail out if necessary. */
|
||||||
|
ulInitialSequenceNumber = ulApplicationGetNextSequenceNumber(
|
||||||
|
*ipLOCAL_IP_ADDRESS_POINTER,
|
||||||
|
pxSocket->usLocalPort,
|
||||||
|
pxTCPPacket->xIPHeader.ulSourceIPAddress,
|
||||||
|
pxTCPPacket->xTCPHeader.usSourcePort );
|
||||||
|
|
||||||
/* A pure SYN (without ACK) has come in, create a new socket to answer
|
/* A pure SYN (without ACK) has come in, create a new socket to answer
|
||||||
it. */
|
it. */
|
||||||
|
if( 0 != ulInitialSequenceNumber )
|
||||||
|
{
|
||||||
if( pxSocket->u.xTCP.bits.bReuseSocket != pdFALSE_UNSIGNED )
|
if( pxSocket->u.xTCP.bits.bReuseSocket != pdFALSE_UNSIGNED )
|
||||||
{
|
{
|
||||||
/* The flag bReuseSocket indicates that the same instance of the
|
/* The flag bReuseSocket indicates that the same instance of the
|
||||||
|
@ -3140,7 +3123,7 @@ FreeRTOS_Socket_t *pxReturn;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
FreeRTOS_Socket_t *pxNewSocket = (FreeRTOS_Socket_t *)
|
FreeRTOS_Socket_t *pxNewSocket = ( FreeRTOS_Socket_t * )
|
||||||
FreeRTOS_socket( FREERTOS_AF_INET, FREERTOS_SOCK_STREAM, FREERTOS_IPPROTO_TCP );
|
FreeRTOS_socket( FREERTOS_AF_INET, FREERTOS_SOCK_STREAM, FREERTOS_IPPROTO_TCP );
|
||||||
|
|
||||||
if( ( pxNewSocket == NULL ) || ( pxNewSocket == FREERTOS_INVALID_SOCKET ) )
|
if( ( pxNewSocket == NULL ) || ( pxNewSocket == FREERTOS_INVALID_SOCKET ) )
|
||||||
|
@ -3158,12 +3141,13 @@ FreeRTOS_Socket_t *pxReturn;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if( pxReturn != NULL )
|
if( 0 != ulInitialSequenceNumber && pxReturn != NULL )
|
||||||
{
|
{
|
||||||
pxReturn->u.xTCP.usRemotePort = FreeRTOS_htons( pxTCPPacket->xTCPHeader.usSourcePort );
|
pxReturn->u.xTCP.usRemotePort = FreeRTOS_htons( pxTCPPacket->xTCPHeader.usSourcePort );
|
||||||
pxReturn->u.xTCP.ulRemoteIP = FreeRTOS_htonl( pxTCPPacket->xIPHeader.ulSourceIPAddress );
|
pxReturn->u.xTCP.ulRemoteIP = FreeRTOS_htonl( pxTCPPacket->xIPHeader.ulSourceIPAddress );
|
||||||
pxReturn->u.xTCP.xTCPWindow.ulOurSequenceNumber = ulNextInitialSequenceNumber;
|
pxReturn->u.xTCP.xTCPWindow.ulOurSequenceNumber = ulInitialSequenceNumber;
|
||||||
|
|
||||||
/* Here is the SYN action. */
|
/* Here is the SYN action. */
|
||||||
pxReturn->u.xTCP.xTCPWindow.rx.ulCurrentSequenceNumber = FreeRTOS_ntohl( pxTCPPacket->xTCPHeader.ulSequenceNumber );
|
pxReturn->u.xTCP.xTCPWindow.rx.ulCurrentSequenceNumber = FreeRTOS_ntohl( pxTCPPacket->xTCPHeader.ulSequenceNumber );
|
||||||
|
@ -3171,9 +3155,6 @@ FreeRTOS_Socket_t *pxReturn;
|
||||||
|
|
||||||
prvTCPCreateWindow( pxReturn );
|
prvTCPCreateWindow( pxReturn );
|
||||||
|
|
||||||
/* It is recommended to increase the ISS for each new connection with a value of 0x102. */
|
|
||||||
ulNextInitialSequenceNumber += INITIAL_SEQUENCE_NUMBER_INCREMENT;
|
|
||||||
|
|
||||||
vTCPStateChange( pxReturn, eSYN_FIRST );
|
vTCPStateChange( pxReturn, eSYN_FIRST );
|
||||||
|
|
||||||
/* Make a copy of the header up to the TCP header. It is needed later
|
/* Make a copy of the header up to the TCP header. It is needed later
|
||||||
|
@ -3248,7 +3229,7 @@ struct freertos_sockaddr xAddress;
|
||||||
/* A reference to the new socket may be stored and the socket is marked
|
/* A reference to the new socket may be stored and the socket is marked
|
||||||
as 'passable'. */
|
as 'passable'. */
|
||||||
|
|
||||||
/* When bPassAccept is true, this socket may be returned in a call to
|
/* When bPassAccept is pdTRUE_UNSIGNED this socket may be returned in a call to
|
||||||
accept(). */
|
accept(). */
|
||||||
pxNewSocket->u.xTCP.bits.bPassAccept = pdTRUE_UNSIGNED;
|
pxNewSocket->u.xTCP.bits.bPassAccept = pdTRUE_UNSIGNED;
|
||||||
if(pxSocket->u.xTCP.pxPeerSocket == NULL )
|
if(pxSocket->u.xTCP.pxPeerSocket == NULL )
|
||||||
|
@ -3327,3 +3308,7 @@ BaseType_t xResult = pdFALSE;
|
||||||
|
|
||||||
#endif /* ipconfigUSE_TCP == 1 */
|
#endif /* ipconfigUSE_TCP == 1 */
|
||||||
|
|
||||||
|
/* Provide access to private members for testing. */
|
||||||
|
#ifdef AMAZON_FREERTOS_ENABLE_UNIT_TESTS
|
||||||
|
#include "aws_freertos_tcp_test_access_tcp_define.h"
|
||||||
|
#endif
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* FreeRTOS+TCP V2.0.3
|
* FreeRTOS+TCP V2.0.7
|
||||||
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
@ -199,7 +199,7 @@ extern void vListInsertGeneric( List_t * const pxList, ListItem_t * const pxNewL
|
||||||
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
/* TCP segment pool. */
|
/* TCP segement pool. */
|
||||||
#if( ipconfigUSE_TCP_WIN == 1 )
|
#if( ipconfigUSE_TCP_WIN == 1 )
|
||||||
static TCPSegment_t *xTCPSegments = NULL;
|
static TCPSegment_t *xTCPSegments = NULL;
|
||||||
#endif /* ipconfigUSE_TCP_WIN == 1 */
|
#endif /* ipconfigUSE_TCP_WIN == 1 */
|
||||||
|
@ -292,7 +292,7 @@ void vListInsertGeneric( List_t * const pxList, ListItem_t * const pxNewListItem
|
||||||
pxWhere->pxPrevious = pxNewListItem;
|
pxWhere->pxPrevious = pxNewListItem;
|
||||||
|
|
||||||
/* Remember which list the item is in. */
|
/* Remember which list the item is in. */
|
||||||
pxNewListItem->pxContainer = pxList;
|
pxNewListItem->pvContainer = ( void * ) pxList; /* If this line fails to build then ensure configENABLE_BACKWARD_COMPATIBILITY is set to 1 in FreeRTOSConfig.h. */
|
||||||
|
|
||||||
( pxList->uxNumberOfItems )++;
|
( pxList->uxNumberOfItems )++;
|
||||||
}
|
}
|
||||||
|
@ -597,12 +597,12 @@ void vTCPWindowCreate( TCPWindow_t *pxWindow, uint32_t ulRxWindowLength,
|
||||||
prvCreateSectors();
|
prvCreateSectors();
|
||||||
}
|
}
|
||||||
|
|
||||||
vListInitialise( &( pxWindow->xTxSegments ) );
|
vListInitialise( &pxWindow->xTxSegments );
|
||||||
vListInitialise( &( pxWindow->xRxSegments ) );
|
vListInitialise( &pxWindow->xRxSegments );
|
||||||
|
|
||||||
vListInitialise( &( pxWindow->xPriorityQueue ) ); /* Priority queue: segments which must be sent immediately */
|
vListInitialise( &pxWindow->xPriorityQueue ); /* Priority queue: segments which must be sent immediately */
|
||||||
vListInitialise( &( pxWindow->xTxQueue ) ); /* Transmit queue: segments queued for transmission */
|
vListInitialise( &pxWindow->xTxQueue ); /* Transmit queue: segments queued for transmission */
|
||||||
vListInitialise( &( pxWindow->xWaitQueue ) ); /* Waiting queue: outstanding segments */
|
vListInitialise( &pxWindow->xWaitQueue ); /* Waiting queue: outstanding segments */
|
||||||
}
|
}
|
||||||
#endif /* ipconfigUSE_TCP_WIN == 1 */
|
#endif /* ipconfigUSE_TCP_WIN == 1 */
|
||||||
|
|
||||||
|
@ -788,13 +788,10 @@ const int32_t l500ms = 500;
|
||||||
{
|
{
|
||||||
ulSavedSequenceNumber = ulCurrentSequenceNumber;
|
ulSavedSequenceNumber = ulCurrentSequenceNumber;
|
||||||
|
|
||||||
/* Clean up all sequence received between ulSequenceNumber
|
/* Clean up all sequence received between ulSequenceNumber and ulSequenceNumber + ulLength since they are duplicated.
|
||||||
and ulSequenceNumber + ulLength since they are duplicated.
|
If the server is forced to retransmit packets several time in a row it might send a batch of concatenated packet for speed.
|
||||||
If the server is forced to retransmit packets several time
|
So we cannot rely on the packets between ulSequenceNumber and ulSequenceNumber + ulLength to be sequential and it is better to just
|
||||||
in a row it might send a batch of concatenated packet for
|
clean them out. */
|
||||||
speed. So we cannot rely on the packets between
|
|
||||||
ulSequenceNumber and ulSequenceNumber + ulLength to be
|
|
||||||
sequential and it is better to just clean them out. */
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
pxFound = xTCPWindowRxConfirm( pxWindow, ulSequenceNumber, ulLength );
|
pxFound = xTCPWindowRxConfirm( pxWindow, ulSequenceNumber, ulLength );
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* FreeRTOS+TCP V2.0.3
|
* FreeRTOS+TCP V2.0.7
|
||||||
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
@ -128,15 +128,16 @@ uint32_t ulIPAddress = pxNetworkBuffer->ulIPAddress;
|
||||||
and
|
and
|
||||||
xIPHeader.usHeaderChecksum
|
xIPHeader.usHeaderChecksum
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Save options now, as they will be overwritten by memcpy */
|
/* Save options now, as they will be overwritten by memcpy */
|
||||||
#if( ipconfigDRIVER_INCLUDED_TX_IP_CHECKSUM == 0 )
|
#if( ipconfigDRIVER_INCLUDED_TX_IP_CHECKSUM == 0 )
|
||||||
{
|
|
||||||
ucSocketOptions = pxNetworkBuffer->pucEthernetBuffer[ ipSOCKET_OPTIONS_OFFSET ];
|
ucSocketOptions = pxNetworkBuffer->pucEthernetBuffer[ ipSOCKET_OPTIONS_OFFSET ];
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
/*
|
||||||
memcpy( ( void *) &( pxUDPPacket->xEthernetHeader.xSourceAddress ), ( void * ) xDefaultPartUDPPacketHeader.ucBytes, sizeof( xDefaultPartUDPPacketHeader ) );
|
* Offset the memcpy by the size of a MAC address to start at the packet's
|
||||||
|
* Ethernet header 'source' MAC address; the preceding 'destination' should not be altered.
|
||||||
|
*/
|
||||||
|
char *pxUdpSrcAddrOffset = ( char *) pxUDPPacket + sizeof( MACAddress_t );
|
||||||
|
memcpy( pxUdpSrcAddrOffset, xDefaultPartUDPPacketHeader.ucBytes, sizeof( xDefaultPartUDPPacketHeader ) );
|
||||||
|
|
||||||
#if ipconfigSUPPORT_OUTGOING_PINGS == 1
|
#if ipconfigSUPPORT_OUTGOING_PINGS == 1
|
||||||
if( pxNetworkBuffer->usPort == ipPACKET_CONTAINS_ICMP_DATA )
|
if( pxNetworkBuffer->usPort == ipPACKET_CONTAINS_ICMP_DATA )
|
||||||
|
@ -153,6 +154,7 @@ uint32_t ulIPAddress = pxNetworkBuffer->ulIPAddress;
|
||||||
/* The total transmit size adds on the Ethernet header. */
|
/* The total transmit size adds on the Ethernet header. */
|
||||||
pxNetworkBuffer->xDataLength = pxIPHeader->usLength + sizeof( EthernetHeader_t );
|
pxNetworkBuffer->xDataLength = pxIPHeader->usLength + sizeof( EthernetHeader_t );
|
||||||
pxIPHeader->usLength = FreeRTOS_htons( pxIPHeader->usLength );
|
pxIPHeader->usLength = FreeRTOS_htons( pxIPHeader->usLength );
|
||||||
|
/* HT:endian: changed back to network endian */
|
||||||
pxIPHeader->ulDestinationIPAddress = pxNetworkBuffer->ulIPAddress;
|
pxIPHeader->ulDestinationIPAddress = pxNetworkBuffer->ulIPAddress;
|
||||||
|
|
||||||
#if( ipconfigUSE_LLMNR == 1 )
|
#if( ipconfigUSE_LLMNR == 1 )
|
||||||
|
@ -174,7 +176,7 @@ uint32_t ulIPAddress = pxNetworkBuffer->ulIPAddress;
|
||||||
|
|
||||||
if( ( ucSocketOptions & ( uint8_t ) FREERTOS_SO_UDPCKSUM_OUT ) != 0u )
|
if( ( ucSocketOptions & ( uint8_t ) FREERTOS_SO_UDPCKSUM_OUT ) != 0u )
|
||||||
{
|
{
|
||||||
usGenerateProtocolChecksum( (uint8_t*)pxUDPPacket, pdTRUE );
|
usGenerateProtocolChecksum( (uint8_t*)pxUDPPacket, pxNetworkBuffer->xDataLength, pdTRUE );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -241,6 +243,7 @@ FreeRTOS_Socket_t *pxSocket;
|
||||||
|
|
||||||
UDPPacket_t *pxUDPPacket = (UDPPacket_t *) pxNetworkBuffer->pucEthernetBuffer;
|
UDPPacket_t *pxUDPPacket = (UDPPacket_t *) pxNetworkBuffer->pucEthernetBuffer;
|
||||||
|
|
||||||
|
/* Caller must check for minimum packet size. */
|
||||||
pxSocket = pxUDPSocketLookup( usPort );
|
pxSocket = pxUDPSocketLookup( usPort );
|
||||||
|
|
||||||
if( pxSocket )
|
if( pxSocket )
|
||||||
|
@ -265,9 +268,9 @@ UDPPacket_t *pxUDPPacket = (UDPPacket_t *) pxNetworkBuffer->pucEthernetBuffer;
|
||||||
destinationAddress.sin_addr = pxUDPPacket->xIPHeader.ulDestinationIPAddress;
|
destinationAddress.sin_addr = pxUDPPacket->xIPHeader.ulDestinationIPAddress;
|
||||||
|
|
||||||
if( xHandler( ( Socket_t * ) pxSocket, ( void* ) pcData, ( size_t ) pxNetworkBuffer->xDataLength,
|
if( xHandler( ( Socket_t * ) pxSocket, ( void* ) pcData, ( size_t ) pxNetworkBuffer->xDataLength,
|
||||||
&xSourceAddress, &destinationAddress ) != pdFALSE )
|
&xSourceAddress, &destinationAddress ) )
|
||||||
{
|
{
|
||||||
xReturn = pdFAIL; /* xHandler has consumed the data, do not add it to .xWaitingPacketsList'. */
|
xReturn = pdFAIL; /* FAIL means that we did not consume or release the buffer */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -344,21 +347,8 @@ UDPPacket_t *pxUDPPacket = (UDPPacket_t *) pxNetworkBuffer->pucEthernetBuffer;
|
||||||
/* There is no socket listening to the target port, but still it might
|
/* There is no socket listening to the target port, but still it might
|
||||||
be for this node. */
|
be for this node. */
|
||||||
|
|
||||||
#if( ipconfigUSE_DNS == 1 )
|
|
||||||
/* A DNS reply, check for the source port. Although the DNS client
|
|
||||||
does open a UDP socket to send a messages, this socket will be
|
|
||||||
closed after a short timeout. Messages that come late (after the
|
|
||||||
socket is closed) will be treated here. */
|
|
||||||
if( FreeRTOS_ntohs( pxUDPPacket->xUDPHeader.usSourcePort ) == ipDNS_PORT )
|
|
||||||
{
|
|
||||||
vARPRefreshCacheEntry( &( pxUDPPacket->xEthernetHeader.xSourceAddress ), pxUDPPacket->xIPHeader.ulSourceIPAddress );
|
|
||||||
xReturn = ( BaseType_t )ulDNSHandlePacket( pxNetworkBuffer );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if( ipconfigUSE_LLMNR == 1 )
|
#if( ipconfigUSE_LLMNR == 1 )
|
||||||
/* An LLMNR request, check for the destination port. */
|
/* a LLMNR request, check for the destination port. */
|
||||||
if( ( usPort == FreeRTOS_ntohs( ipLLMNR_PORT ) ) ||
|
if( ( usPort == FreeRTOS_ntohs( ipLLMNR_PORT ) ) ||
|
||||||
( pxUDPPacket->xUDPHeader.usSourcePort == FreeRTOS_ntohs( ipLLMNR_PORT ) ) )
|
( pxUDPPacket->xUDPHeader.usSourcePort == FreeRTOS_ntohs( ipLLMNR_PORT ) ) )
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,4 +1,11 @@
|
||||||
Changes since V2.0.0 release
|
Changes between 160919 and 180821 releases:
|
||||||
|
|
||||||
|
+ Multiple security improvements and fixes in packet parsing routines, DNS
|
||||||
|
caching, and TCP sequence number and ID generation.
|
||||||
|
+ Disable NBNS and LLMNR by default.
|
||||||
|
+ Add TCP hang protection by default.
|
||||||
|
|
||||||
|
We thank Ori Karliner of Zimperium zLabs Team for reporting these issues.
|
||||||
|
|
||||||
+ Update FreeRTOS_gethostbyname() to allow an IP address to be passed in -
|
+ Update FreeRTOS_gethostbyname() to allow an IP address to be passed in -
|
||||||
in which case it is just returned as a uint32_t.
|
in which case it is just returned as a uint32_t.
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* FreeRTOS+TCP V2.0.3
|
* FreeRTOS+TCP V2.0.7
|
||||||
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
@ -389,11 +389,13 @@ from the FreeRTOSIPConfig.h configuration header file. */
|
||||||
|
|
||||||
#if( ipconfigUSE_DNS_CACHE != 0 )
|
#if( ipconfigUSE_DNS_CACHE != 0 )
|
||||||
#ifndef ipconfigDNS_CACHE_NAME_LENGTH
|
#ifndef ipconfigDNS_CACHE_NAME_LENGTH
|
||||||
#define ipconfigDNS_CACHE_NAME_LENGTH ( 16 )
|
/* Per https://tools.ietf.org/html/rfc1035, 253 is the maximum string length
|
||||||
|
of a DNS name. The following default accounts for a null terminator. */
|
||||||
|
#define ipconfigDNS_CACHE_NAME_LENGTH 254
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef ipconfigDNS_CACHE_ENTRIES
|
#ifndef ipconfigDNS_CACHE_ENTRIES
|
||||||
#define ipconfigDNS_CACHE_ENTRIES 0
|
#define ipconfigDNS_CACHE_ENTRIES 1
|
||||||
#endif
|
#endif
|
||||||
#endif /* ipconfigUSE_DNS_CACHE != 0 */
|
#endif /* ipconfigUSE_DNS_CACHE != 0 */
|
||||||
|
|
||||||
|
@ -510,7 +512,7 @@ from the FreeRTOSIPConfig.h configuration header file. */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef ipconfigTCP_KEEP_ALIVE
|
#ifndef ipconfigTCP_KEEP_ALIVE
|
||||||
#define ipconfigTCP_KEEP_ALIVE 1
|
#define ipconfigTCP_KEEP_ALIVE 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef ipconfigDNS_USE_CALLBACKS
|
#ifndef ipconfigDNS_USE_CALLBACKS
|
||||||
|
@ -525,10 +527,17 @@ from the FreeRTOSIPConfig.h configuration header file. */
|
||||||
#define ipconfigUSE_NBNS 0
|
#define ipconfigUSE_NBNS 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* As an attack surface reduction for ports that listen for inbound
|
||||||
|
connections, hang protection can help reduce the impact of SYN floods. */
|
||||||
#ifndef ipconfigTCP_HANG_PROTECTION
|
#ifndef ipconfigTCP_HANG_PROTECTION
|
||||||
#define ipconfigTCP_HANG_PROTECTION 1
|
#define ipconfigTCP_HANG_PROTECTION 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Non-activity timeout is expressed in seconds. */
|
||||||
|
#ifndef ipconfigTCP_HANG_PROTECTION_TIME
|
||||||
|
#define ipconfigTCP_HANG_PROTECTION_TIME 30
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef ipconfigTCP_IP_SANITY
|
#ifndef ipconfigTCP_IP_SANITY
|
||||||
#define ipconfigTCP_IP_SANITY 0
|
#define ipconfigTCP_IP_SANITY 0
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* FreeRTOS+TCP V2.0.3
|
* FreeRTOS+TCP V2.0.7
|
||||||
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* FreeRTOS+TCP V2.0.3
|
* FreeRTOS+TCP V2.0.7
|
||||||
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* FreeRTOS+TCP V2.0.3
|
* FreeRTOS+TCP V2.0.7
|
||||||
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* FreeRTOS+TCP V2.0.3
|
* FreeRTOS+TCP V2.0.7
|
||||||
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* FreeRTOS+TCP V2.0.3
|
* FreeRTOS+TCP V2.0.7
|
||||||
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
@ -436,8 +436,18 @@ eFrameProcessingResult_t eConsiderFrameForProcessing( const uint8_t * const pucE
|
||||||
uint16_t usGenerateChecksum( uint32_t ulSum, const uint8_t * pucNextData, size_t uxDataLengthBytes );
|
uint16_t usGenerateChecksum( uint32_t ulSum, const uint8_t * pucNextData, size_t uxDataLengthBytes );
|
||||||
|
|
||||||
/* Socket related private functions. */
|
/* Socket related private functions. */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The caller must ensure that pxNetworkBuffer->xDataLength is the UDP packet
|
||||||
|
* payload size (excluding packet headers) and that the packet in pucEthernetBuffer
|
||||||
|
* is at least the size of UDPPacket_t.
|
||||||
|
*/
|
||||||
BaseType_t xProcessReceivedUDPPacket( NetworkBufferDescriptor_t *pxNetworkBuffer, uint16_t usPort );
|
BaseType_t xProcessReceivedUDPPacket( NetworkBufferDescriptor_t *pxNetworkBuffer, uint16_t usPort );
|
||||||
void vNetworkSocketsInit( void );
|
|
||||||
|
/*
|
||||||
|
* Initialize the socket list data structures for TCP and UDP.
|
||||||
|
*/
|
||||||
|
BaseType_t vNetworkSocketsInit( void );
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Returns pdTRUE if the IP task has been created and is initialised. Otherwise
|
* Returns pdTRUE if the IP task has been created and is initialised. Otherwise
|
||||||
|
@ -671,7 +681,7 @@ void vProcessGeneratedUDPPacket( NetworkBufferDescriptor_t * const pxNetworkBuff
|
||||||
* bOut = false: checksum will be calculated for incoming packets
|
* bOut = false: checksum will be calculated for incoming packets
|
||||||
* returning 0xffff means: checksum was correct
|
* returning 0xffff means: checksum was correct
|
||||||
*/
|
*/
|
||||||
uint16_t usGenerateProtocolChecksum( const uint8_t * const pucEthernetBuffer, BaseType_t xOutgoingPacket );
|
uint16_t usGenerateProtocolChecksum( const uint8_t * const pucEthernetBuffer, size_t uxBufferLength, BaseType_t xOutgoingPacket );
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* An Ethernet frame has been updated (maybe it was an ARP request or a PING
|
* An Ethernet frame has been updated (maybe it was an ARP request or a PING
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* FreeRTOS+TCP V2.0.3
|
* FreeRTOS+TCP V2.0.7
|
||||||
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* FreeRTOS+TCP V2.0.3
|
* FreeRTOS+TCP V2.0.7
|
||||||
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* FreeRTOS+TCP V2.0.3
|
* FreeRTOS+TCP V2.0.7
|
||||||
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* FreeRTOS+TCP V2.0.3
|
* FreeRTOS+TCP V2.0.7
|
||||||
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
@ -80,17 +80,9 @@ typedef struct xTCP_WINSIZE
|
||||||
*/
|
*/
|
||||||
/* Keep this as a multiple of 4 */
|
/* Keep this as a multiple of 4 */
|
||||||
#if( ipconfigUSE_TCP_WIN == 1 )
|
#if( ipconfigUSE_TCP_WIN == 1 )
|
||||||
#if( ipconfigUSE_TCP_TIMESTAMPS == 1 )
|
|
||||||
#define ipSIZE_TCP_OPTIONS ( 16u + 12u )
|
|
||||||
#else
|
|
||||||
#define ipSIZE_TCP_OPTIONS 16u
|
#define ipSIZE_TCP_OPTIONS 16u
|
||||||
#endif
|
|
||||||
#else
|
#else
|
||||||
#if ipconfigUSE_TCP_TIMESTAMPS == 1
|
|
||||||
#define ipSIZE_TCP_OPTIONS ( 12u + 12u )
|
|
||||||
#else
|
|
||||||
#define ipSIZE_TCP_OPTIONS 12u
|
#define ipSIZE_TCP_OPTIONS 12u
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -120,9 +112,6 @@ typedef struct xTCP_WINDOW
|
||||||
* In other words: the sequence number of the left side of the sliding window */
|
* In other words: the sequence number of the left side of the sliding window */
|
||||||
uint32_t ulFINSequenceNumber; /* The sequence number which carried the FIN flag */
|
uint32_t ulFINSequenceNumber; /* The sequence number which carried the FIN flag */
|
||||||
uint32_t ulHighestSequenceNumber;/* Sequence number of the right-most byte + 1 */
|
uint32_t ulHighestSequenceNumber;/* Sequence number of the right-most byte + 1 */
|
||||||
#if( ipconfigUSE_TCP_TIMESTAMPS == 1 )
|
|
||||||
uint32_t ulTimeStamp; /* The value of the TCP timestamp, transmitted or received */
|
|
||||||
#endif
|
|
||||||
} rx, tx;
|
} rx, tx;
|
||||||
uint32_t ulOurSequenceNumber; /* The SEQ number we're sending out */
|
uint32_t ulOurSequenceNumber; /* The SEQ number we're sending out */
|
||||||
uint32_t ulUserDataLength; /* Number of bytes in Rx buffer which may be passed to the user, after having received a 'missing packet' */
|
uint32_t ulUserDataLength; /* Number of bytes in Rx buffer which may be passed to the user, after having received a 'missing packet' */
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* FreeRTOS+TCP V2.0.3
|
* FreeRTOS+TCP V2.0.7
|
||||||
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* FreeRTOS+TCP V2.0.3
|
* FreeRTOS+TCP V2.0.7
|
||||||
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* FreeRTOS+TCP V2.0.3
|
* FreeRTOS+TCP V2.0.7
|
||||||
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* FreeRTOS+TCP V2.0.3
|
* FreeRTOS+TCP V2.0.7
|
||||||
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* FreeRTOS+TCP V2.0.3
|
* FreeRTOS+TCP V2.0.7
|
||||||
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
|
|
@ -1,28 +1,27 @@
|
||||||
/*
|
/*
|
||||||
* FreeRTOS+TCP V2.0.3
|
FreeRTOS+TCP V2.0.7
|
||||||
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
||||||
* this software and associated documentation files (the "Software"), to deal in
|
|
||||||
* the Software without restriction, including without limitation the rights to
|
|
||||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
||||||
* the Software, and to permit persons to whom the Software is furnished to do so,
|
|
||||||
* subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all
|
|
||||||
* copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
||||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
||||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
||||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
||||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*
|
|
||||||
* http://aws.amazon.com/freertos
|
|
||||||
* http://www.FreeRTOS.org
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
this software and associated documentation files (the "Software"), to deal in
|
||||||
|
the Software without restriction, including without limitation the rights to
|
||||||
|
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||||
|
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
|
subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||||
|
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||||
|
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||||
|
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
http://aws.amazon.com/freertos
|
||||||
|
http://www.FreeRTOS.org
|
||||||
|
*/
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
*
|
*
|
||||||
|
@ -226,7 +225,7 @@ UBaseType_t uxCount;
|
||||||
available. */
|
available. */
|
||||||
if( xSemaphoreTake( xNetworkBufferSemaphore, xBlockTimeTicks ) == pdPASS )
|
if( xSemaphoreTake( xNetworkBufferSemaphore, xBlockTimeTicks ) == pdPASS )
|
||||||
{
|
{
|
||||||
/* Protect the structure as it is accessed from tasks and
|
/* Protect the structure as they are accessed from tasks and
|
||||||
interrupts. */
|
interrupts. */
|
||||||
ipconfigBUFFER_ALLOC_LOCK();
|
ipconfigBUFFER_ALLOC_LOCK();
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* FreeRTOS+TCP V2.0.3
|
* FreeRTOS+TCP V2.0.7
|
||||||
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
@ -19,11 +19,12 @@
|
||||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
*
|
*
|
||||||
* http://aws.amazon.com/freertos
|
|
||||||
* http://www.FreeRTOS.org
|
* http://www.FreeRTOS.org
|
||||||
|
* http://aws.amazon.com/freertos
|
||||||
|
*
|
||||||
|
* 1 tab == 4 spaces!
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
*
|
*
|
||||||
* See the following web page for essential buffer allocation scheme usage and
|
* See the following web page for essential buffer allocation scheme usage and
|
||||||
|
@ -323,12 +324,21 @@ BaseType_t xListItemAlreadyInFreeList;
|
||||||
}
|
}
|
||||||
taskEXIT_CRITICAL();
|
taskEXIT_CRITICAL();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Update the network state machine, unless the program fails to release its 'xNetworkBufferSemaphore'.
|
||||||
|
* The program should only try to release its semaphore if 'xListItemAlreadyInFreeList' is false.
|
||||||
|
*/
|
||||||
if( xListItemAlreadyInFreeList == pdFALSE )
|
if( xListItemAlreadyInFreeList == pdFALSE )
|
||||||
{
|
{
|
||||||
xSemaphoreGive( xNetworkBufferSemaphore );
|
if ( xSemaphoreGive( xNetworkBufferSemaphore ) == pdTRUE )
|
||||||
}
|
{
|
||||||
|
|
||||||
iptraceNETWORK_BUFFER_RELEASED( pxNetworkBuffer );
|
iptraceNETWORK_BUFFER_RELEASED( pxNetworkBuffer );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
iptraceNETWORK_BUFFER_RELEASED( pxNetworkBuffer );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -1,28 +1,27 @@
|
||||||
/*
|
/*
|
||||||
* FreeRTOS+TCP V2.0.3
|
FreeRTOS+TCP V2.0.7
|
||||||
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
||||||
* this software and associated documentation files (the "Software"), to deal in
|
|
||||||
* the Software without restriction, including without limitation the rights to
|
|
||||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
||||||
* the Software, and to permit persons to whom the Software is furnished to do so,
|
|
||||||
* subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all
|
|
||||||
* copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
||||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
||||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
||||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
||||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*
|
|
||||||
* http://aws.amazon.com/freertos
|
|
||||||
* http://www.FreeRTOS.org
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
this software and associated documentation files (the "Software"), to deal in
|
||||||
|
the Software without restriction, including without limitation the rights to
|
||||||
|
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||||
|
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
|
subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||||
|
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||||
|
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||||
|
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
http://aws.amazon.com/freertos
|
||||||
|
http://www.FreeRTOS.org
|
||||||
|
*/
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,28 +1,27 @@
|
||||||
/*
|
/*
|
||||||
* FreeRTOS+TCP V2.0.3
|
FreeRTOS+TCP V2.0.7
|
||||||
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
||||||
* this software and associated documentation files (the "Software"), to deal in
|
|
||||||
* the Software without restriction, including without limitation the rights to
|
|
||||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
||||||
* the Software, and to permit persons to whom the Software is furnished to do so,
|
|
||||||
* subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all
|
|
||||||
* copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
||||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
||||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
||||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
||||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*
|
|
||||||
* http://aws.amazon.com/freertos
|
|
||||||
* http://www.FreeRTOS.org
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
this software and associated documentation files (the "Software"), to deal in
|
||||||
|
the Software without restriction, including without limitation the rights to
|
||||||
|
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||||
|
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
|
subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||||
|
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||||
|
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||||
|
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
http://aws.amazon.com/freertos
|
||||||
|
http://www.FreeRTOS.org
|
||||||
|
*/
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,28 +1,27 @@
|
||||||
/*
|
/*
|
||||||
* FreeRTOS+TCP V2.0.3
|
FreeRTOS+TCP V2.0.7
|
||||||
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
||||||
* this software and associated documentation files (the "Software"), to deal in
|
|
||||||
* the Software without restriction, including without limitation the rights to
|
|
||||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
||||||
* the Software, and to permit persons to whom the Software is furnished to do so,
|
|
||||||
* subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all
|
|
||||||
* copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
||||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
||||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
||||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
||||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*
|
|
||||||
* http://aws.amazon.com/freertos
|
|
||||||
* http://www.FreeRTOS.org
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
this software and associated documentation files (the "Software"), to deal in
|
||||||
|
the Software without restriction, including without limitation the rights to
|
||||||
|
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||||
|
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
|
subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||||
|
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||||
|
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||||
|
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
http://aws.amazon.com/freertos
|
||||||
|
http://www.FreeRTOS.org
|
||||||
|
*/
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,28 +1,27 @@
|
||||||
/*
|
/*
|
||||||
* FreeRTOS+TCP V2.0.3
|
FreeRTOS+TCP V2.0.7
|
||||||
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
||||||
* this software and associated documentation files (the "Software"), to deal in
|
|
||||||
* the Software without restriction, including without limitation the rights to
|
|
||||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
||||||
* the Software, and to permit persons to whom the Software is furnished to do so,
|
|
||||||
* subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all
|
|
||||||
* copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
||||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
||||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
||||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
||||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*
|
|
||||||
* http://aws.amazon.com/freertos
|
|
||||||
* http://www.FreeRTOS.org
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
this software and associated documentation files (the "Software"), to deal in
|
||||||
|
the Software without restriction, including without limitation the rights to
|
||||||
|
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||||
|
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
|
subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||||
|
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||||
|
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||||
|
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
http://aws.amazon.com/freertos
|
||||||
|
http://www.FreeRTOS.org
|
||||||
|
*/
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,28 +1,27 @@
|
||||||
/*
|
/*
|
||||||
* FreeRTOS+TCP V2.0.3
|
FreeRTOS+TCP V2.0.7
|
||||||
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
||||||
* this software and associated documentation files (the "Software"), to deal in
|
|
||||||
* the Software without restriction, including without limitation the rights to
|
|
||||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
||||||
* the Software, and to permit persons to whom the Software is furnished to do so,
|
|
||||||
* subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all
|
|
||||||
* copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
||||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
||||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
||||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
||||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*
|
|
||||||
* http://aws.amazon.com/freertos
|
|
||||||
* http://www.FreeRTOS.org
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
this software and associated documentation files (the "Software"), to deal in
|
||||||
|
the Software without restriction, including without limitation the rights to
|
||||||
|
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||||
|
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
|
subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||||
|
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||||
|
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||||
|
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
http://aws.amazon.com/freertos
|
||||||
|
http://www.FreeRTOS.org
|
||||||
|
*/
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,28 +1,27 @@
|
||||||
/*
|
/*
|
||||||
* FreeRTOS+TCP V2.0.3
|
FreeRTOS+TCP V2.0.7
|
||||||
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
||||||
* this software and associated documentation files (the "Software"), to deal in
|
|
||||||
* the Software without restriction, including without limitation the rights to
|
|
||||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
||||||
* the Software, and to permit persons to whom the Software is furnished to do so,
|
|
||||||
* subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all
|
|
||||||
* copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
||||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
||||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
||||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
||||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*
|
|
||||||
* http://aws.amazon.com/freertos
|
|
||||||
* http://www.FreeRTOS.org
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
this software and associated documentation files (the "Software"), to deal in
|
||||||
|
the Software without restriction, including without limitation the rights to
|
||||||
|
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||||
|
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
|
subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||||
|
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||||
|
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||||
|
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
http://aws.amazon.com/freertos
|
||||||
|
http://www.FreeRTOS.org
|
||||||
|
*/
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,28 +1,27 @@
|
||||||
/*
|
/*
|
||||||
* FreeRTOS+TCP V2.0.3
|
FreeRTOS+TCP V2.0.7
|
||||||
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
||||||
* this software and associated documentation files (the "Software"), to deal in
|
|
||||||
* the Software without restriction, including without limitation the rights to
|
|
||||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
||||||
* the Software, and to permit persons to whom the Software is furnished to do so,
|
|
||||||
* subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all
|
|
||||||
* copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
||||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
||||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
||||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
||||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*
|
|
||||||
* http://aws.amazon.com/freertos
|
|
||||||
* http://www.FreeRTOS.org
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
this software and associated documentation files (the "Software"), to deal in
|
||||||
|
the Software without restriction, including without limitation the rights to
|
||||||
|
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||||
|
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
|
subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||||
|
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||||
|
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||||
|
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
http://aws.amazon.com/freertos
|
||||||
|
http://www.FreeRTOS.org
|
||||||
|
*/
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,28 +1,27 @@
|
||||||
/*
|
/*
|
||||||
* FreeRTOS+TCP V2.0.3
|
FreeRTOS+TCP V2.0.7
|
||||||
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
||||||
* this software and associated documentation files (the "Software"), to deal in
|
|
||||||
* the Software without restriction, including without limitation the rights to
|
|
||||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
||||||
* the Software, and to permit persons to whom the Software is furnished to do so,
|
|
||||||
* subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all
|
|
||||||
* copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
||||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
||||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
||||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
||||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*
|
|
||||||
* http://aws.amazon.com/freertos
|
|
||||||
* http://www.FreeRTOS.org
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
this software and associated documentation files (the "Software"), to deal in
|
||||||
|
the Software without restriction, including without limitation the rights to
|
||||||
|
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||||
|
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
|
subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||||
|
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||||
|
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||||
|
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
http://aws.amazon.com/freertos
|
||||||
|
http://www.FreeRTOS.org
|
||||||
|
*/
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,28 +1,27 @@
|
||||||
/*
|
/*
|
||||||
* FreeRTOS+TCP V2.0.3
|
FreeRTOS+TCP V2.0.7
|
||||||
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
||||||
* this software and associated documentation files (the "Software"), to deal in
|
|
||||||
* the Software without restriction, including without limitation the rights to
|
|
||||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
||||||
* the Software, and to permit persons to whom the Software is furnished to do so,
|
|
||||||
* subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all
|
|
||||||
* copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
||||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
||||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
||||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
||||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*
|
|
||||||
* http://aws.amazon.com/freertos
|
|
||||||
* http://www.FreeRTOS.org
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
this software and associated documentation files (the "Software"), to deal in
|
||||||
|
the Software without restriction, including without limitation the rights to
|
||||||
|
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||||
|
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
|
subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||||
|
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||||
|
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||||
|
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
http://aws.amazon.com/freertos
|
||||||
|
http://www.FreeRTOS.org
|
||||||
|
*/
|
||||||
|
|
||||||
/* Standard includes. */
|
/* Standard includes. */
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
|
@ -1,28 +1,27 @@
|
||||||
/*
|
/*
|
||||||
* FreeRTOS+TCP V2.0.3
|
FreeRTOS+TCP V2.0.7
|
||||||
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
||||||
* this software and associated documentation files (the "Software"), to deal in
|
|
||||||
* the Software without restriction, including without limitation the rights to
|
|
||||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
||||||
* the Software, and to permit persons to whom the Software is furnished to do so,
|
|
||||||
* subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all
|
|
||||||
* copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
||||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
||||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
||||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
||||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*
|
|
||||||
* http://aws.amazon.com/freertos
|
|
||||||
* http://www.FreeRTOS.org
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
this software and associated documentation files (the "Software"), to deal in
|
||||||
|
the Software without restriction, including without limitation the rights to
|
||||||
|
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||||
|
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
|
subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||||
|
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||||
|
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||||
|
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
http://aws.amazon.com/freertos
|
||||||
|
http://www.FreeRTOS.org
|
||||||
|
*/
|
||||||
|
|
||||||
/* Standard includes. */
|
/* Standard includes. */
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
|
@ -787,16 +787,11 @@ uint8_t *pucBuffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Obtain the size of the packet and put it into the "usReceivedLength" variable. */
|
/* Obtain the size of the packet and put it into the "usReceivedLength" variable. */
|
||||||
|
|
||||||
/* get received frame */
|
|
||||||
if( xReceivedLength > 0ul )
|
|
||||||
{
|
|
||||||
/* In order to make the code easier and faster, only packets in a single buffer
|
/* In order to make the code easier and faster, only packets in a single buffer
|
||||||
will be accepted. This can be done by making the buffers large enough to
|
will be accepted. This can be done by making the buffers large enough to
|
||||||
hold a complete Ethernet packet (1536 bytes).
|
hold a complete Ethernet packet (1536 bytes). */
|
||||||
Therefore, two sanity checks: */
|
if( xReceivedLength > 0ul && xReceivedLength < ETH_RX_BUF_SIZE )
|
||||||
configASSERT( xReceivedLength <= ETH_RX_BUF_SIZE );
|
{
|
||||||
|
|
||||||
if( ( pxDMARxDescriptor->Status & ( ETH_DMARXDESC_CE | ETH_DMARXDESC_IPV4HCE | ETH_DMARXDESC_FT ) ) != ETH_DMARXDESC_FT )
|
if( ( pxDMARxDescriptor->Status & ( ETH_DMARXDESC_CE | ETH_DMARXDESC_IPV4HCE | ETH_DMARXDESC_FT ) ) != ETH_DMARXDESC_FT )
|
||||||
{
|
{
|
||||||
/* Not an Ethernet frame-type or a checmsum error. */
|
/* Not an Ethernet frame-type or a checmsum error. */
|
||||||
|
|
|
@ -1,28 +1,27 @@
|
||||||
/*
|
/*
|
||||||
* FreeRTOS+TCP V2.0.3
|
FreeRTOS+TCP V2.0.7
|
||||||
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
||||||
* this software and associated documentation files (the "Software"), to deal in
|
|
||||||
* the Software without restriction, including without limitation the rights to
|
|
||||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
||||||
* the Software, and to permit persons to whom the Software is furnished to do so,
|
|
||||||
* subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all
|
|
||||||
* copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
||||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
||||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
||||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
||||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*
|
|
||||||
* http://aws.amazon.com/freertos
|
|
||||||
* http://www.FreeRTOS.org
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
this software and associated documentation files (the "Software"), to deal in
|
||||||
|
the Software without restriction, including without limitation the rights to
|
||||||
|
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||||
|
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
|
subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||||
|
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||||
|
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||||
|
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
http://aws.amazon.com/freertos
|
||||||
|
http://www.FreeRTOS.org
|
||||||
|
*/
|
||||||
|
|
||||||
/* WinPCap includes. */
|
/* WinPCap includes. */
|
||||||
#define HAVE_REMOTE
|
#define HAVE_REMOTE
|
||||||
|
@ -80,7 +79,7 @@ static pcap_if_t * prvPrintAvailableNetworkInterfaces( void );
|
||||||
* by the configNETWORK_INTERFACE_TO_USE constant in FreeRTOSConfig.h.
|
* by the configNETWORK_INTERFACE_TO_USE constant in FreeRTOSConfig.h.
|
||||||
*/
|
*/
|
||||||
static void prvOpenSelectedNetworkInterface( pcap_if_t *pxAllNetworkInterfaces );
|
static void prvOpenSelectedNetworkInterface( pcap_if_t *pxAllNetworkInterfaces );
|
||||||
static void prvOpenInterface( const char *pucName );
|
static int prvOpenInterface( const char *pucName );
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Configure the capture filter to allow blocking reads, and to filter out
|
* Configure the capture filter to allow blocking reads, and to filter out
|
||||||
|
@ -275,7 +274,7 @@ static BaseType_t xInvalidInterfaceDetected = pdFALSE;
|
||||||
printf( "\r\nThe interface that will be opened is set by " );
|
printf( "\r\nThe interface that will be opened is set by " );
|
||||||
printf( "\"configNETWORK_INTERFACE_TO_USE\", which\r\nshould be defined in FreeRTOSConfig.h\r\n" );
|
printf( "\"configNETWORK_INTERFACE_TO_USE\", which\r\nshould be defined in FreeRTOSConfig.h\r\n" );
|
||||||
|
|
||||||
if( ( xConfigNextworkInterfaceToUse < 1L ) || ( xConfigNextworkInterfaceToUse >= lInterfaceNumber ) )
|
if( ( xConfigNextworkInterfaceToUse < 0L ) || ( xConfigNextworkInterfaceToUse >= lInterfaceNumber ) )
|
||||||
{
|
{
|
||||||
printf( "\r\nERROR: configNETWORK_INTERFACE_TO_USE is set to %d, which is an invalid value.\r\n", xConfigNextworkInterfaceToUse );
|
printf( "\r\nERROR: configNETWORK_INTERFACE_TO_USE is set to %d, which is an invalid value.\r\n", xConfigNextworkInterfaceToUse );
|
||||||
printf( "Please set configNETWORK_INTERFACE_TO_USE to one of the interface numbers listed above,\r\n" );
|
printf( "Please set configNETWORK_INTERFACE_TO_USE to one of the interface numbers listed above,\r\n" );
|
||||||
|
@ -300,7 +299,7 @@ static BaseType_t xInvalidInterfaceDetected = pdFALSE;
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
static void prvOpenInterface( const char *pucName )
|
static int prvOpenInterface( const char *pucName )
|
||||||
{
|
{
|
||||||
static char pucInterfaceName[ 256 ];
|
static char pucInterfaceName[ 256 ];
|
||||||
|
|
||||||
|
@ -326,6 +325,7 @@ static char pucInterfaceName[ 256 ];
|
||||||
if ( pxOpenedInterfaceHandle == NULL )
|
if ( pxOpenedInterfaceHandle == NULL )
|
||||||
{
|
{
|
||||||
printf( "\n%s is not supported by WinPcap and cannot be opened\n", pucInterfaceName );
|
printf( "\n%s is not supported by WinPcap and cannot be opened\n", pucInterfaceName );
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -333,6 +333,7 @@ static char pucInterfaceName[ 256 ];
|
||||||
out packets that are not of interest to this demo. */
|
out packets that are not of interest to this demo. */
|
||||||
prvConfigureCaptureBehaviour();
|
prvConfigureCaptureBehaviour();
|
||||||
}
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
@ -343,13 +344,22 @@ int32_t x;
|
||||||
|
|
||||||
/* Walk the list of devices until the selected device is located. */
|
/* Walk the list of devices until the selected device is located. */
|
||||||
xInterface = pxAllNetworkInterfaces;
|
xInterface = pxAllNetworkInterfaces;
|
||||||
for( x = 0L; x < ( xConfigNextworkInterfaceToUse - 1L ); x++ )
|
if (0 == xConfigNextworkInterfaceToUse) {
|
||||||
|
while (NULL != xInterface) {
|
||||||
|
xInterface = xInterface->next;
|
||||||
|
if (0 == prvOpenInterface(xInterface->name)) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
for (x = 1L; x < xConfigNextworkInterfaceToUse; x++)
|
||||||
{
|
{
|
||||||
xInterface = xInterface->next;
|
xInterface = xInterface->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Open the selected interface. */
|
/* Open the selected interface. */
|
||||||
prvOpenInterface( xInterface->name );
|
(void) prvOpenInterface(xInterface->name);
|
||||||
|
}
|
||||||
|
|
||||||
/* The device list is no longer required. */
|
/* The device list is no longer required. */
|
||||||
pcap_freealldevs( pxAllNetworkInterfaces );
|
pcap_freealldevs( pxAllNetworkInterfaces );
|
||||||
|
@ -514,7 +524,16 @@ eFrameProcessingResult_t eResult;
|
||||||
|
|
||||||
iptraceNETWORK_INTERFACE_RECEIVE();
|
iptraceNETWORK_INTERFACE_RECEIVE();
|
||||||
|
|
||||||
|
/* Check for minimal size. */
|
||||||
|
if( pxHeader->len >= sizeof( EthernetHeader_t ) )
|
||||||
|
{
|
||||||
eResult = ipCONSIDER_FRAME_FOR_PROCESSING( pucPacketData );
|
eResult = ipCONSIDER_FRAME_FOR_PROCESSING( pucPacketData );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
eResult = eReleaseBuffer;
|
||||||
|
}
|
||||||
|
|
||||||
if( eResult == eProcessBuffer )
|
if( eResult == eProcessBuffer )
|
||||||
{
|
{
|
||||||
/* Will the data fit into the frame buffer? */
|
/* Will the data fit into the frame buffer? */
|
||||||
|
|
|
@ -1,28 +1,27 @@
|
||||||
/*
|
/*
|
||||||
* FreeRTOS+TCP V2.0.3
|
FreeRTOS+TCP V2.0.7
|
||||||
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
||||||
* this software and associated documentation files (the "Software"), to deal in
|
|
||||||
* the Software without restriction, including without limitation the rights to
|
|
||||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
||||||
* the Software, and to permit persons to whom the Software is furnished to do so,
|
|
||||||
* subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all
|
|
||||||
* copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
||||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
||||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
||||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
||||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*
|
|
||||||
* http://aws.amazon.com/freertos
|
|
||||||
* http://www.FreeRTOS.org
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
this software and associated documentation files (the "Software"), to deal in
|
||||||
|
the Software without restriction, including without limitation the rights to
|
||||||
|
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||||
|
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
|
subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||||
|
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||||
|
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||||
|
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
http://aws.amazon.com/freertos
|
||||||
|
http://www.FreeRTOS.org
|
||||||
|
*/
|
||||||
|
|
||||||
/* Standard includes. */
|
/* Standard includes. */
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
|
@ -1,27 +1,27 @@
|
||||||
/*
|
/*
|
||||||
* FreeRTOS+TCP V2.0.3
|
FreeRTOS+TCP V2.0.7
|
||||||
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
* this software and associated documentation files (the "Software"), to deal in
|
this software and associated documentation files (the "Software"), to deal in
|
||||||
* the Software without restriction, including without limitation the rights to
|
the Software without restriction, including without limitation the rights to
|
||||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||||
* the Software, and to permit persons to whom the Software is furnished to do so,
|
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
* subject to the following conditions:
|
subject to the following conditions:
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all
|
The above copyright notice and this permission notice shall be included in all
|
||||||
* copies or substantial portions of the Software.
|
copies or substantial portions of the Software.
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
*
|
|
||||||
* http://aws.amazon.com/freertos
|
http://aws.amazon.com/freertos
|
||||||
* http://www.FreeRTOS.org
|
http://www.FreeRTOS.org
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "Zynq/x_emacpsif.h"
|
#include "Zynq/x_emacpsif.h"
|
||||||
#include "Zynq/x_topology.h"
|
#include "Zynq/x_topology.h"
|
||||||
|
|
|
@ -1,28 +1,27 @@
|
||||||
/*
|
/*
|
||||||
* FreeRTOS+TCP V2.0.3
|
FreeRTOS+TCP V2.0.7
|
||||||
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
||||||
* this software and associated documentation files (the "Software"), to deal in
|
|
||||||
* the Software without restriction, including without limitation the rights to
|
|
||||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
||||||
* the Software, and to permit persons to whom the Software is furnished to do so,
|
|
||||||
* subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all
|
|
||||||
* copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
||||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
||||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
||||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
||||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*
|
|
||||||
* http://aws.amazon.com/freertos
|
|
||||||
* http://www.FreeRTOS.org
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
this software and associated documentation files (the "Software"), to deal in
|
||||||
|
the Software without restriction, including without limitation the rights to
|
||||||
|
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||||
|
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
|
subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||||
|
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||||
|
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||||
|
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
http://aws.amazon.com/freertos
|
||||||
|
http://www.FreeRTOS.org
|
||||||
|
*/
|
||||||
|
|
||||||
/* Standard includes. */
|
/* Standard includes. */
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
<name>General</name>
|
<name>General</name>
|
||||||
<archiveVersion>3</archiveVersion>
|
<archiveVersion>3</archiveVersion>
|
||||||
<data>
|
<data>
|
||||||
<version>29</version>
|
<version>30</version>
|
||||||
<wantNonLocal>1</wantNonLocal>
|
<wantNonLocal>1</wantNonLocal>
|
||||||
<debug>1</debug>
|
<debug>1</debug>
|
||||||
<option>
|
<option>
|
||||||
|
@ -36,7 +36,7 @@
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>Output description</name>
|
<name>Output description</name>
|
||||||
<state>No specifier a, A, no specifier n, no float nor long long, no flags.</state>
|
<state>No specifier a, A, no specifier n, no float nor long long, no flags, without multibyte support.</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>GOutputBinary</name>
|
<name>GOutputBinary</name>
|
||||||
|
@ -66,7 +66,7 @@
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>OGLastSavedByProductVersion</name>
|
<name>OGLastSavedByProductVersion</name>
|
||||||
<state>8.20.1.14181</state>
|
<state>8.22.1.15696</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>GeneralEnableMisra</name>
|
<name>GeneralEnableMisra</name>
|
||||||
|
@ -200,6 +200,10 @@
|
||||||
<name>DSPExtension</name>
|
<name>DSPExtension</name>
|
||||||
<state>0</state>
|
<state>0</state>
|
||||||
</option>
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>TrustZone</name>
|
||||||
|
<state>1</state>
|
||||||
|
</option>
|
||||||
</data>
|
</data>
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
|
@ -620,6 +624,7 @@
|
||||||
<option>
|
<option>
|
||||||
<name>AUserIncludes</name>
|
<name>AUserIncludes</name>
|
||||||
<state>$PROJ_DIR$/.</state>
|
<state>$PROJ_DIR$/.</state>
|
||||||
|
<state>$PROJ_DIR$\..\..\Source\portable\IAR\ARM_CA5_No_GIC</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>AExtraOptionsCheckV2</name>
|
<name>AExtraOptionsCheckV2</name>
|
||||||
|
|
|
@ -25,7 +25,7 @@ if not "%~1" == "" goto debugFile
|
||||||
|
|
||||||
@echo on
|
@echo on
|
||||||
|
|
||||||
"C:\devtools\IAR Systems\Embedded Workbench 8.0\common\bin\cspybat" -f "C:\temp\rc\FreeRTOSv10.0.0\FreeRTOS\Demo\CORTEX_A5_SAMA5D2x_Xplained_IAR\settings\RTOSDemo.sram.general.xcl" --backend -f "C:\temp\rc\FreeRTOSv10.0.0\FreeRTOS\Demo\CORTEX_A5_SAMA5D2x_Xplained_IAR\settings\RTOSDemo.sram.driver.xcl"
|
"C:\devtools\IAR Systems\Embedded Workbench 8.0\common\bin\cspybat" -f "C:\Users\ribarry\Dev\FreeRTOS\WorkingCopy\FreeRTOS\Demo\CORTEX_A5_SAMA5D2x_Xplained_IAR\settings\RTOSDemo.sram.general.xcl" --backend -f "C:\Users\ribarry\Dev\FreeRTOS\WorkingCopy\FreeRTOS\Demo\CORTEX_A5_SAMA5D2x_Xplained_IAR\settings\RTOSDemo.sram.driver.xcl"
|
||||||
|
|
||||||
@echo off
|
@echo off
|
||||||
goto end
|
goto end
|
||||||
|
@ -34,7 +34,7 @@ goto end
|
||||||
|
|
||||||
@echo on
|
@echo on
|
||||||
|
|
||||||
"C:\devtools\IAR Systems\Embedded Workbench 8.0\common\bin\cspybat" -f "C:\temp\rc\FreeRTOSv10.0.0\FreeRTOS\Demo\CORTEX_A5_SAMA5D2x_Xplained_IAR\settings\RTOSDemo.sram.general.xcl" "--debug_file=%~1" --backend -f "C:\temp\rc\FreeRTOSv10.0.0\FreeRTOS\Demo\CORTEX_A5_SAMA5D2x_Xplained_IAR\settings\RTOSDemo.sram.driver.xcl"
|
"C:\devtools\IAR Systems\Embedded Workbench 8.0\common\bin\cspybat" -f "C:\Users\ribarry\Dev\FreeRTOS\WorkingCopy\FreeRTOS\Demo\CORTEX_A5_SAMA5D2x_Xplained_IAR\settings\RTOSDemo.sram.general.xcl" "--debug_file=%~1" --backend -f "C:\Users\ribarry\Dev\FreeRTOS\WorkingCopy\FreeRTOS\Demo\CORTEX_A5_SAMA5D2x_Xplained_IAR\settings\RTOSDemo.sram.driver.xcl"
|
||||||
|
|
||||||
@echo off
|
@echo off
|
||||||
:end
|
:end
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
"-p"
|
"-p"
|
||||||
|
|
||||||
"C:\devtools\IAR Systems\Embedded Workbench 8.0\arm\CONFIG\debugger\Atmel\ATSAMA5D27.ddf"
|
"C:\devtools\IAR Systems\Embedded Workbench 8.0\arm\CONFIG\debugger\Microchip\ATSAMA5D27.ddf"
|
||||||
|
|
||||||
"--drv_verify_download"
|
"--drv_verify_download"
|
||||||
|
|
||||||
|
|
|
@ -2,13 +2,13 @@
|
||||||
|
|
||||||
"C:\devtools\IAR Systems\Embedded Workbench 8.0\arm\bin\armJET.dll"
|
"C:\devtools\IAR Systems\Embedded Workbench 8.0\arm\bin\armJET.dll"
|
||||||
|
|
||||||
"C:\temp\rc\FreeRTOSv10.0.0\FreeRTOS\Demo\CORTEX_A5_SAMA5D2x_Xplained_IAR\sram\bin\sram.out"
|
"C:\Users\ribarry\Dev\FreeRTOS\WorkingCopy\FreeRTOS\Demo\CORTEX_A5_SAMA5D2x_Xplained_IAR\sram\bin\sram.out"
|
||||||
|
|
||||||
--plugin "C:\devtools\IAR Systems\Embedded Workbench 8.0\arm\bin\armbat.dll"
|
--plugin "C:\devtools\IAR Systems\Embedded Workbench 8.0\arm\bin\armbat.dll"
|
||||||
|
|
||||||
--device_macro "C:\devtools\IAR Systems\Embedded Workbench 8.0\arm\config\debugger\Atmel\SAMA5D2.dmac"
|
--device_macro "C:\devtools\IAR Systems\Embedded Workbench 8.0\arm\config\debugger\Microchip\SAMA5D2.dmac"
|
||||||
|
|
||||||
--macro "C:\temp\rc\FreeRTOSv10.0.0\FreeRTOS\Demo\CORTEX_A5_SAMA5D2x_Xplained_IAR\AtmelFiles\target\sama5d2\toolchain\iar\sram.mac"
|
--macro "C:\Users\ribarry\Dev\FreeRTOS\WorkingCopy\FreeRTOS\Demo\CORTEX_A5_SAMA5D2x_Xplained_IAR\AtmelFiles\target\sama5d2\toolchain\iar\sram.mac"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -1,7 +1,6 @@
|
||||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
<project>
|
<project>
|
||||||
<fileVersion>2</fileVersion>
|
<fileVersion>3</fileVersion>
|
||||||
<configuration>
|
<configuration>
|
||||||
<name>sram</name>
|
<name>sram</name>
|
||||||
<toolchain>
|
<toolchain>
|
||||||
|
@ -12,7 +11,7 @@
|
||||||
<name>C-SPY</name>
|
<name>C-SPY</name>
|
||||||
<archiveVersion>2</archiveVersion>
|
<archiveVersion>2</archiveVersion>
|
||||||
<data>
|
<data>
|
||||||
<version>26</version>
|
<version>29</version>
|
||||||
<wantNonLocal>1</wantNonLocal>
|
<wantNonLocal>1</wantNonLocal>
|
||||||
<debug>1</debug>
|
<debug>1</debug>
|
||||||
<option>
|
<option>
|
||||||
|
@ -49,7 +48,7 @@
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>MemFile</name>
|
<name>MemFile</name>
|
||||||
<state>$TOOLKIT_DIR$\CONFIG\debugger\Atmel\ATSAMA5D35.ddf</state>
|
<state>$TOOLKIT_DIR$\CONFIG\debugger\Microchip\ATSAMA5D35.ddf</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>RunToEnable</name>
|
<name>RunToEnable</name>
|
||||||
|
@ -93,11 +92,7 @@
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>OCLastSavedByProductVersion</name>
|
<name>OCLastSavedByProductVersion</name>
|
||||||
<state>7.20.2.7418</state>
|
<state>8.22.1.15696</state>
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>OCDownloadAttachToProgram</name>
|
|
||||||
<state>0</state>
|
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>UseFlashLoader</name>
|
<name>UseFlashLoader</name>
|
||||||
|
@ -207,6 +202,18 @@
|
||||||
<name>OCMulticoreSlaveConfiguration</name>
|
<name>OCMulticoreSlaveConfiguration</name>
|
||||||
<state></state>
|
<state></state>
|
||||||
</option>
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>OCDownloadExtraImage</name>
|
||||||
|
<state>1</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>OCAttachSlave</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>MassEraseBeforeFlashing</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
</data>
|
</data>
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
|
@ -235,40 +242,26 @@
|
||||||
</data>
|
</data>
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
<name>ANGEL_ID</name>
|
<name>CADI_ID</name>
|
||||||
<archiveVersion>2</archiveVersion>
|
<archiveVersion>2</archiveVersion>
|
||||||
<data>
|
<data>
|
||||||
<version>0</version>
|
<version>0</version>
|
||||||
<wantNonLocal>1</wantNonLocal>
|
<wantNonLocal>1</wantNonLocal>
|
||||||
<debug>1</debug>
|
<debug>1</debug>
|
||||||
<option>
|
<option>
|
||||||
<name>CCAngelHeartbeat</name>
|
<name>CCadiMemory</name>
|
||||||
<state>1</state>
|
<state>1</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>CAngelCommunication</name>
|
<name>Fast Model</name>
|
||||||
<state>1</state>
|
<state></state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>CAngelCommBaud</name>
|
<name>CCADILogFileCheck</name>
|
||||||
<version>0</version>
|
|
||||||
<state>3</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>CAngelCommPort</name>
|
|
||||||
<version>0</version>
|
|
||||||
<state>0</state>
|
<state>0</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>ANGELTCPIP</name>
|
<name>CCADILogFileEditB</name>
|
||||||
<state>aaa.bbb.ccc.ddd</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>DoAngelLogfile</name>
|
|
||||||
<state>0</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>AngelLogFile</name>
|
|
||||||
<state>$PROJ_DIR$\cspycomm.log</state>
|
<state>$PROJ_DIR$\cspycomm.log</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
|
@ -281,15 +274,15 @@
|
||||||
<name>CMSISDAP_ID</name>
|
<name>CMSISDAP_ID</name>
|
||||||
<archiveVersion>2</archiveVersion>
|
<archiveVersion>2</archiveVersion>
|
||||||
<data>
|
<data>
|
||||||
<version>2</version>
|
<version>4</version>
|
||||||
<wantNonLocal>1</wantNonLocal>
|
<wantNonLocal>1</wantNonLocal>
|
||||||
<debug>1</debug>
|
<debug>1</debug>
|
||||||
<option>
|
<option>
|
||||||
<name>OCDriverInfo</name>
|
<name>CatchSFERR</name>
|
||||||
<state>1</state>
|
<state>1</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>CMSISDAPAttachSlave</name>
|
<name>OCDriverInfo</name>
|
||||||
<state>1</state>
|
<state>1</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
|
@ -446,6 +439,14 @@
|
||||||
<name>OCJetEmuParams</name>
|
<name>OCJetEmuParams</name>
|
||||||
<state>1</state>
|
<state>1</state>
|
||||||
</option>
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCCMSISDAPUsbSerialNo</name>
|
||||||
|
<state></state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCCMSISDAPUsbSerialNoSelect</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
</data>
|
</data>
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
|
@ -485,50 +486,19 @@
|
||||||
</option>
|
</option>
|
||||||
</data>
|
</data>
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
|
||||||
<name>IARROM_ID</name>
|
|
||||||
<archiveVersion>2</archiveVersion>
|
|
||||||
<data>
|
|
||||||
<version>1</version>
|
|
||||||
<wantNonLocal>1</wantNonLocal>
|
|
||||||
<debug>1</debug>
|
|
||||||
<option>
|
|
||||||
<name>CRomLogFileCheck</name>
|
|
||||||
<state>0</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>CRomLogFileEditB</name>
|
|
||||||
<state>$PROJ_DIR$\cspycomm.log</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>CRomCommPort</name>
|
|
||||||
<version>0</version>
|
|
||||||
<state>0</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>CRomCommBaud</name>
|
|
||||||
<version>0</version>
|
|
||||||
<state>7</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>OCDriverInfo</name>
|
|
||||||
<state>1</state>
|
|
||||||
</option>
|
|
||||||
</data>
|
|
||||||
</settings>
|
|
||||||
<settings>
|
<settings>
|
||||||
<name>IJET_ID</name>
|
<name>IJET_ID</name>
|
||||||
<archiveVersion>2</archiveVersion>
|
<archiveVersion>2</archiveVersion>
|
||||||
<data>
|
<data>
|
||||||
<version>3</version>
|
<version>8</version>
|
||||||
<wantNonLocal>1</wantNonLocal>
|
<wantNonLocal>1</wantNonLocal>
|
||||||
<debug>1</debug>
|
<debug>1</debug>
|
||||||
<option>
|
<option>
|
||||||
<name>OCDriverInfo</name>
|
<name>CatchSFERR</name>
|
||||||
<state>1</state>
|
<state>1</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>IjetAttachSlave</name>
|
<name>OCDriverInfo</name>
|
||||||
<state>1</state>
|
<state>1</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
|
@ -718,15 +688,45 @@
|
||||||
<name>OCJetEmuParams</name>
|
<name>OCJetEmuParams</name>
|
||||||
<state>1</state>
|
<state>1</state>
|
||||||
</option>
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IjetPreferETB</name>
|
||||||
|
<state>1</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IjetTraceSettingsList</name>
|
||||||
|
<version>0</version>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IjetTraceSizeList</name>
|
||||||
|
<version>0</version>
|
||||||
|
<state>4</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>FlashBoardPathSlave</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCIjetUsbSerialNo</name>
|
||||||
|
<state></state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCIjetUsbSerialNoSelect</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
</data>
|
</data>
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
<name>JLINK_ID</name>
|
<name>JLINK_ID</name>
|
||||||
<archiveVersion>2</archiveVersion>
|
<archiveVersion>2</archiveVersion>
|
||||||
<data>
|
<data>
|
||||||
<version>15</version>
|
<version>16</version>
|
||||||
<wantNonLocal>1</wantNonLocal>
|
<wantNonLocal>1</wantNonLocal>
|
||||||
<debug>1</debug>
|
<debug>1</debug>
|
||||||
|
<option>
|
||||||
|
<name>CCCatchSFERR</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>JLinkSpeed</name>
|
<name>JLinkSpeed</name>
|
||||||
<state>32</state>
|
<state>32</state>
|
||||||
|
@ -828,10 +828,6 @@
|
||||||
<name>CCJLinkInterfaceRadio</name>
|
<name>CCJLinkInterfaceRadio</name>
|
||||||
<state>0</state>
|
<state>0</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
|
||||||
<name>OCJLinkAttachSlave</name>
|
|
||||||
<state>1</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
<option>
|
||||||
<name>CCJLinkResetList</name>
|
<name>CCJLinkResetList</name>
|
||||||
<version>6</version>
|
<version>6</version>
|
||||||
|
@ -954,25 +950,16 @@
|
||||||
</data>
|
</data>
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
<name>MACRAIGOR_ID</name>
|
<name>NULINK_ID</name>
|
||||||
<archiveVersion>2</archiveVersion>
|
<archiveVersion>2</archiveVersion>
|
||||||
<data>
|
<data>
|
||||||
<version>3</version>
|
<version>0</version>
|
||||||
<wantNonLocal>1</wantNonLocal>
|
<wantNonLocal>1</wantNonLocal>
|
||||||
<debug>1</debug>
|
<debug>1</debug>
|
||||||
<option>
|
<option>
|
||||||
<name>jtag</name>
|
<name>OCDriverInfo</name>
|
||||||
<version>0</version>
|
|
||||||
<state>0</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>EmuSpeed</name>
|
|
||||||
<state>1</state>
|
<state>1</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
|
||||||
<name>TCPIP</name>
|
|
||||||
<state>aaa.bbb.ccc.ddd</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
<option>
|
||||||
<name>DoLogfile</name>
|
<name>DoLogfile</name>
|
||||||
<state>0</state>
|
<state>0</state>
|
||||||
|
@ -981,95 +968,19 @@
|
||||||
<name>LogFile</name>
|
<name>LogFile</name>
|
||||||
<state>$PROJ_DIR$\cspycomm.log</state>
|
<state>$PROJ_DIR$\cspycomm.log</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
|
||||||
<name>DoEmuMultiTarget</name>
|
|
||||||
<state>0</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>EmuMultiTarget</name>
|
|
||||||
<state>0@ARM7TDMI</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>EmuHWReset</name>
|
|
||||||
<state>0</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>CEmuCommBaud</name>
|
|
||||||
<version>0</version>
|
|
||||||
<state>4</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>CEmuCommPort</name>
|
|
||||||
<version>0</version>
|
|
||||||
<state>0</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>jtago</name>
|
|
||||||
<version>0</version>
|
|
||||||
<state>0</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>OCDriverInfo</name>
|
|
||||||
<state>1</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>UnusedAddr</name>
|
|
||||||
<state>0x00800000</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>CCMacraigorHWResetDelay</name>
|
|
||||||
<state></state>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>CCJTagBreakpointRadio</name>
|
|
||||||
<state>0</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>CCJTagDoUpdateBreakpoints</name>
|
|
||||||
<state>0</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>CCJTagUpdateBreakpoints</name>
|
|
||||||
<state>main</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>CCMacraigorInterfaceRadio</name>
|
|
||||||
<state>0</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>CCMacraigorInterfaceCmdLine</name>
|
|
||||||
<state>0</state>
|
|
||||||
</option>
|
|
||||||
</data>
|
</data>
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
<name>PEMICRO_ID</name>
|
<name>PEMICRO_ID</name>
|
||||||
<archiveVersion>2</archiveVersion>
|
<archiveVersion>2</archiveVersion>
|
||||||
<data>
|
<data>
|
||||||
<version>1</version>
|
<version>3</version>
|
||||||
<wantNonLocal>1</wantNonLocal>
|
<wantNonLocal>1</wantNonLocal>
|
||||||
<debug>1</debug>
|
<debug>1</debug>
|
||||||
<option>
|
<option>
|
||||||
<name>OCDriverInfo</name>
|
<name>OCDriverInfo</name>
|
||||||
<state>1</state>
|
<state>1</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
|
||||||
<name>OCPEMicroAttachSlave</name>
|
|
||||||
<state>1</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>CCPEMicroInterfaceList</name>
|
|
||||||
<version>0</version>
|
|
||||||
<state>0</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>CCPEMicroResetDelay</name>
|
|
||||||
<state></state>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>CCPEMicroJtagSpeed</name>
|
|
||||||
<state>#UNINITIALIZED#</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
<option>
|
||||||
<name>CCJPEMicroShowSettings</name>
|
<name>CCJPEMicroShowSettings</name>
|
||||||
<state>0</state>
|
<state>0</state>
|
||||||
|
@ -1082,100 +993,13 @@
|
||||||
<name>LogFile</name>
|
<name>LogFile</name>
|
||||||
<state>$PROJ_DIR$\cspycomm.log</state>
|
<state>$PROJ_DIR$\cspycomm.log</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
|
||||||
<name>CCPEMicroUSBDevice</name>
|
|
||||||
<version>0</version>
|
|
||||||
<state>0</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>CCPEMicroSerialPort</name>
|
|
||||||
<version>0</version>
|
|
||||||
<state>0</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>CCJPEMicroTCPIPAutoScanNetwork</name>
|
|
||||||
<state>1</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>CCPEMicroTCPIP</name>
|
|
||||||
<state>10.0.0.1</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>CCPEMicroCommCmdLineProducer</name>
|
|
||||||
<state>0</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>CCSTLinkInterfaceRadio</name>
|
|
||||||
<state>0</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>CCSTLinkInterfaceCmdLine</name>
|
|
||||||
<state>0</state>
|
|
||||||
</option>
|
|
||||||
</data>
|
|
||||||
</settings>
|
|
||||||
<settings>
|
|
||||||
<name>RDI_ID</name>
|
|
||||||
<archiveVersion>2</archiveVersion>
|
|
||||||
<data>
|
|
||||||
<version>2</version>
|
|
||||||
<wantNonLocal>1</wantNonLocal>
|
|
||||||
<debug>1</debug>
|
|
||||||
<option>
|
|
||||||
<name>CRDIDriverDll</name>
|
|
||||||
<state>###Uninitialized###</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>CRDILogFileCheck</name>
|
|
||||||
<state>0</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>CRDILogFileEdit</name>
|
|
||||||
<state>$PROJ_DIR$\cspycomm.log</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>CCRDIHWReset</name>
|
|
||||||
<state>0</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>CCRDICatchReset</name>
|
|
||||||
<state>0</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>CCRDICatchUndef</name>
|
|
||||||
<state>0</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>CCRDICatchSWI</name>
|
|
||||||
<state>0</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>CCRDICatchData</name>
|
|
||||||
<state>0</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>CCRDICatchPrefetch</name>
|
|
||||||
<state>0</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>CCRDICatchIRQ</name>
|
|
||||||
<state>0</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>CCRDICatchFIQ</name>
|
|
||||||
<state>0</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>OCDriverInfo</name>
|
|
||||||
<state>1</state>
|
|
||||||
</option>
|
|
||||||
</data>
|
</data>
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
<name>STLINK_ID</name>
|
<name>STLINK_ID</name>
|
||||||
<archiveVersion>2</archiveVersion>
|
<archiveVersion>2</archiveVersion>
|
||||||
<data>
|
<data>
|
||||||
<version>2</version>
|
<version>5</version>
|
||||||
<wantNonLocal>1</wantNonLocal>
|
<wantNonLocal>1</wantNonLocal>
|
||||||
<debug>1</debug>
|
<debug>1</debug>
|
||||||
<option>
|
<option>
|
||||||
|
@ -1192,7 +1016,7 @@
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>CCSTLinkResetList</name>
|
<name>CCSTLinkResetList</name>
|
||||||
<version>1</version>
|
<version>3</version>
|
||||||
<state>0</state>
|
<state>0</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
|
@ -1207,6 +1031,87 @@
|
||||||
<name>CCSwoClockEdit</name>
|
<name>CCSwoClockEdit</name>
|
||||||
<state>2000</state>
|
<state>2000</state>
|
||||||
</option>
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>DoLogfile</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>LogFile</name>
|
||||||
|
<state>$PROJ_DIR$\cspycomm.log</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCSTLinkDoUpdateBreakpoints</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCSTLinkUpdateBreakpoints</name>
|
||||||
|
<state>_call_main</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCSTLinkCatchCORERESET</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCSTLinkCatchMMERR</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCSTLinkCatchNOCPERR</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCSTLinkCatchCHRERR</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCSTLinkCatchSTATERR</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCSTLinkCatchBUSERR</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCSTLinkCatchINTERR</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCSTLinkCatchSFERR</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCSTLinkCatchHARDERR</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCSTLinkCatchDummy</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCSTLinkUsbSerialNo</name>
|
||||||
|
<state></state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCSTLinkUsbSerialNoSelect</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCSTLinkJtagSpeedList</name>
|
||||||
|
<version>0</version>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCSTLinkDAPNumber</name>
|
||||||
|
<state></state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCSTLinkDebugAccessPortRadio</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCSTLinkUseServerSelect</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
</data>
|
</data>
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
|
@ -1235,10 +1140,10 @@
|
||||||
</data>
|
</data>
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
<name>XDS100_ID</name>
|
<name>TIFET_ID</name>
|
||||||
<archiveVersion>2</archiveVersion>
|
<archiveVersion>2</archiveVersion>
|
||||||
<data>
|
<data>
|
||||||
<version>2</version>
|
<version>1</version>
|
||||||
<wantNonLocal>1</wantNonLocal>
|
<wantNonLocal>1</wantNonLocal>
|
||||||
<debug>1</debug>
|
<debug>1</debug>
|
||||||
<option>
|
<option>
|
||||||
|
@ -1246,7 +1151,74 @@
|
||||||
<state>1</state>
|
<state>1</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>OCXDS100AttachSlave</name>
|
<name>CCMSPFetResetList</name>
|
||||||
|
<version>0</version>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCMSPFetInterfaceRadio</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCMSPFetInterfaceCmdLine</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCMSPFetTargetVccTypeDefault</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCMSPFetTargetVoltage</name>
|
||||||
|
<state>###Uninitialized###</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCMSPFetVCCDefault</name>
|
||||||
|
<state>1</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCMSPFetTargetSettlingtime</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCMSPFetRadioJtagSpeedType</name>
|
||||||
|
<state>1</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCMSPFetConnection</name>
|
||||||
|
<version>0</version>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCMSPFetUsbComPort</name>
|
||||||
|
<state>Automatic</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCMSPFetAllowAccessToBSL</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCMSPFetDoLogfile</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCMSPFetLogFile</name>
|
||||||
|
<state>$PROJ_DIR$\cspycomm.log</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCMSPFetRadioEraseFlash</name>
|
||||||
|
<state>1</state>
|
||||||
|
</option>
|
||||||
|
</data>
|
||||||
|
</settings>
|
||||||
|
<settings>
|
||||||
|
<name>XDS100_ID</name>
|
||||||
|
<archiveVersion>2</archiveVersion>
|
||||||
|
<data>
|
||||||
|
<version>6</version>
|
||||||
|
<wantNonLocal>1</wantNonLocal>
|
||||||
|
<debug>1</debug>
|
||||||
|
<option>
|
||||||
|
<name>OCDriverInfo</name>
|
||||||
<state>1</state>
|
<state>1</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
|
@ -1257,11 +1229,6 @@
|
||||||
<name>TIPackage</name>
|
<name>TIPackage</name>
|
||||||
<state></state>
|
<state></state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
|
||||||
<name>CCXds100InterfaceList</name>
|
|
||||||
<version>2</version>
|
|
||||||
<state>0</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
<option>
|
||||||
<name>BoardFile</name>
|
<name>BoardFile</name>
|
||||||
<state></state>
|
<state></state>
|
||||||
|
@ -1274,17 +1241,144 @@
|
||||||
<name>LogFile</name>
|
<name>LogFile</name>
|
||||||
<state>$PROJ_DIR$\cspycomm.log</state>
|
<state>$PROJ_DIR$\cspycomm.log</state>
|
||||||
</option>
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCXds100BreakpointRadio</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCXds100DoUpdateBreakpoints</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCXds100UpdateBreakpoints</name>
|
||||||
|
<state>_call_main</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCXds100CatchReset</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCXds100CatchUndef</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCXds100CatchSWI</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCXds100CatchData</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCXds100CatchPrefetch</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCXds100CatchIRQ</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCXds100CatchFIQ</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCXds100CatchCORERESET</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCXds100CatchMMERR</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCXds100CatchNOCPERR</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCXds100CatchCHRERR</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCXds100CatchSTATERR</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCXds100CatchBUSERR</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCXds100CatchINTERR</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCXds100CatchSFERR</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCXds100CatchHARDERR</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCXds100CatchDummy</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCXds100CpuClockEdit</name>
|
||||||
|
<state></state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCXds100SwoClockAuto</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCXds100SwoClockEdit</name>
|
||||||
|
<state>1000</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCXds100HWResetDelay</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCXds100ResetList</name>
|
||||||
|
<version>0</version>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCXds100UsbSerialNo</name>
|
||||||
|
<state></state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCXds100UsbSerialNoSelect</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCXds100JtagSpeedList</name>
|
||||||
|
<version>0</version>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCXds100InterfaceRadio</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCXds100InterfaceCmdLine</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCXds100ProbeList</name>
|
||||||
|
<version>0</version>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCXds100SWOPortRadio</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCXds100SWOPort</name>
|
||||||
|
<state>1</state>
|
||||||
|
</option>
|
||||||
</data>
|
</data>
|
||||||
</settings>
|
</settings>
|
||||||
<debuggerPlugins>
|
<debuggerPlugins>
|
||||||
<plugin>
|
|
||||||
<file>$TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin</file>
|
|
||||||
<loadFlag>0</loadFlag>
|
|
||||||
</plugin>
|
|
||||||
<plugin>
|
|
||||||
<file>$TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin</file>
|
|
||||||
<loadFlag>0</loadFlag>
|
|
||||||
</plugin>
|
|
||||||
<plugin>
|
<plugin>
|
||||||
<file>$TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin</file>
|
<file>$TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin</file>
|
||||||
<loadFlag>0</loadFlag>
|
<loadFlag>0</loadFlag>
|
||||||
|
@ -1298,7 +1392,11 @@
|
||||||
<loadFlag>0</loadFlag>
|
<loadFlag>0</loadFlag>
|
||||||
</plugin>
|
</plugin>
|
||||||
<plugin>
|
<plugin>
|
||||||
<file>$TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin</file>
|
<file>$TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin</file>
|
||||||
|
<loadFlag>0</loadFlag>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<file>$TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin</file>
|
||||||
<loadFlag>0</loadFlag>
|
<loadFlag>0</loadFlag>
|
||||||
</plugin>
|
</plugin>
|
||||||
<plugin>
|
<plugin>
|
||||||
|
@ -1338,8 +1436,8 @@
|
||||||
<loadFlag>0</loadFlag>
|
<loadFlag>0</loadFlag>
|
||||||
</plugin>
|
</plugin>
|
||||||
<plugin>
|
<plugin>
|
||||||
<file>$EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin</file>
|
<file>$EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin</file>
|
||||||
<loadFlag>1</loadFlag>
|
<loadFlag>0</loadFlag>
|
||||||
</plugin>
|
</plugin>
|
||||||
<plugin>
|
<plugin>
|
||||||
<file>$EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin</file>
|
<file>$EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin</file>
|
||||||
|
@ -1348,5 +1446,3 @@
|
||||||
</debuggerPlugins>
|
</debuggerPlugins>
|
||||||
</configuration>
|
</configuration>
|
||||||
</project>
|
</project>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
<project>
|
<project>
|
||||||
<fileVersion>2</fileVersion>
|
<fileVersion>3</fileVersion>
|
||||||
<configuration>
|
<configuration>
|
||||||
<name>sram</name>
|
<name>sram</name>
|
||||||
<toolchain>
|
<toolchain>
|
||||||
|
@ -12,14 +11,9 @@
|
||||||
<name>General</name>
|
<name>General</name>
|
||||||
<archiveVersion>3</archiveVersion>
|
<archiveVersion>3</archiveVersion>
|
||||||
<data>
|
<data>
|
||||||
<version>22</version>
|
<version>30</version>
|
||||||
<wantNonLocal>1</wantNonLocal>
|
<wantNonLocal>1</wantNonLocal>
|
||||||
<debug>1</debug>
|
<debug>1</debug>
|
||||||
<option>
|
|
||||||
<name>Variant</name>
|
|
||||||
<version>20</version>
|
|
||||||
<state>47</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
<option>
|
||||||
<name>ExePath</name>
|
<name>ExePath</name>
|
||||||
<state>sram\bin</state>
|
<state>sram\bin</state>
|
||||||
|
@ -36,33 +30,18 @@
|
||||||
<name>GEndianMode</name>
|
<name>GEndianMode</name>
|
||||||
<state>0</state>
|
<state>0</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
|
||||||
<name>Input variant</name>
|
|
||||||
<version>3</version>
|
|
||||||
<state>7</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
<option>
|
||||||
<name>Input description</name>
|
<name>Input description</name>
|
||||||
<state>No specifier n, no float nor long long, no scan set, no assignment suppressing, without multibyte support.</state>
|
<state>No specifier n, no float nor long long, no scan set, no assignment suppressing, without multibyte support.</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
|
||||||
<name>Output variant</name>
|
|
||||||
<version>2</version>
|
|
||||||
<state>7</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
<option>
|
||||||
<name>Output description</name>
|
<name>Output description</name>
|
||||||
<state>No specifier a, A, no specifier n, no float nor long long, no flags.</state>
|
<state>No specifier a, A, no specifier n, no float nor long long, no flags, without multibyte support.</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>GOutputBinary</name>
|
<name>GOutputBinary</name>
|
||||||
<state>0</state>
|
<state>0</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
|
||||||
<name>FPU</name>
|
|
||||||
<version>2</version>
|
|
||||||
<state>6</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
<option>
|
||||||
<name>OGCoreOrChip</name>
|
<name>OGCoreOrChip</name>
|
||||||
<state>1</state>
|
<state>1</state>
|
||||||
|
@ -87,7 +66,7 @@
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>OGLastSavedByProductVersion</name>
|
<name>OGLastSavedByProductVersion</name>
|
||||||
<state>7.20.2.7418</state>
|
<state>8.22.1.15696</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>GeneralEnableMisra</name>
|
<name>GeneralEnableMisra</name>
|
||||||
|
@ -135,15 +114,10 @@
|
||||||
<name>RTConfigPath2</name>
|
<name>RTConfigPath2</name>
|
||||||
<state>$TOOLKIT_DIR$\INC\c\DLib_Config_Normal.h</state>
|
<state>$TOOLKIT_DIR$\INC\c\DLib_Config_Normal.h</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
|
||||||
<name>GFPUCoreSlave</name>
|
|
||||||
<version>20</version>
|
|
||||||
<state>47</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
<option>
|
||||||
<name>GBECoreSlave</name>
|
<name>GBECoreSlave</name>
|
||||||
<version>20</version>
|
<version>26</version>
|
||||||
<state>47</state>
|
<state>50</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>OGUseCmsis</name>
|
<name>OGUseCmsis</name>
|
||||||
|
@ -157,13 +131,86 @@
|
||||||
<name>GRuntimeLibThreads</name>
|
<name>GRuntimeLibThreads</name>
|
||||||
<state>0</state>
|
<state>0</state>
|
||||||
</option>
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CoreVariant</name>
|
||||||
|
<version>26</version>
|
||||||
|
<state>50</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>GFPUDeviceSlave</name>
|
||||||
|
<state>ATSAMA5D35 Atmel ATSAMA5D35</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>FPU2</name>
|
||||||
|
<version>0</version>
|
||||||
|
<state>5</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>NrRegs</name>
|
||||||
|
<version>0</version>
|
||||||
|
<state>1</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>NEON</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>GFPUCoreSlave2</name>
|
||||||
|
<version>26</version>
|
||||||
|
<state>50</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>OGCMSISPackSelectDevice</name>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>OgLibHeap</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>OGLibAdditionalLocale</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>OGPrintfVariant</name>
|
||||||
|
<version>0</version>
|
||||||
|
<state>4</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>OGPrintfMultibyteSupport</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>OGScanfVariant</name>
|
||||||
|
<version>0</version>
|
||||||
|
<state>3</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>OGScanfMultibyteSupport</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>GenLocaleTags</name>
|
||||||
|
<state></state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>GenLocaleDisplayOnly</name>
|
||||||
|
<state></state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>DSPExtension</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>TrustZone</name>
|
||||||
|
<state>1</state>
|
||||||
|
</option>
|
||||||
</data>
|
</data>
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
<name>ICCARM</name>
|
<name>ICCARM</name>
|
||||||
<archiveVersion>2</archiveVersion>
|
<archiveVersion>2</archiveVersion>
|
||||||
<data>
|
<data>
|
||||||
<version>31</version>
|
<version>34</version>
|
||||||
<wantNonLocal>1</wantNonLocal>
|
<wantNonLocal>1</wantNonLocal>
|
||||||
<debug>1</debug>
|
<debug>1</debug>
|
||||||
<option>
|
<option>
|
||||||
|
@ -269,10 +316,6 @@
|
||||||
<name>CCRequirePrototypes</name>
|
<name>CCRequirePrototypes</name>
|
||||||
<state>1</state>
|
<state>1</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
|
||||||
<name>CCMultibyteSupport</name>
|
|
||||||
<state>0</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
<option>
|
||||||
<name>CCDiagWarnAreErr</name>
|
<name>CCDiagWarnAreErr</name>
|
||||||
<state>0</state>
|
<state>0</state>
|
||||||
|
@ -323,10 +366,6 @@
|
||||||
<name>CCCodeSection</name>
|
<name>CCCodeSection</name>
|
||||||
<state>SOFTPACK</state>
|
<state>SOFTPACK</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
|
||||||
<name>IInterwork2</name>
|
|
||||||
<state>1</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
<option>
|
||||||
<name>IProcessorMode2</name>
|
<name>IProcessorMode2</name>
|
||||||
<state>0</state>
|
<state>0</state>
|
||||||
|
@ -378,18 +417,6 @@
|
||||||
<name>IccAllowVLA</name>
|
<name>IccAllowVLA</name>
|
||||||
<state>0</state>
|
<state>0</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
|
||||||
<name>IccCppDialect</name>
|
|
||||||
<state>1</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>IccExceptions</name>
|
|
||||||
<state>1</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
|
||||||
<name>IccRTTI</name>
|
|
||||||
<state>1</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
<option>
|
||||||
<name>IccStaticDestr</name>
|
<name>IccStaticDestr</name>
|
||||||
<state>1</state>
|
<state>1</state>
|
||||||
|
@ -419,13 +446,37 @@
|
||||||
<name>CCGuardCalls</name>
|
<name>CCGuardCalls</name>
|
||||||
<state>1</state>
|
<state>1</state>
|
||||||
</option>
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCEncSource</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCEncOutput</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCEncOutputBom</name>
|
||||||
|
<state>1</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>CCEncInput</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IccExceptions2</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IccRTTI2</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
</data>
|
</data>
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
<name>AARM</name>
|
<name>AARM</name>
|
||||||
<archiveVersion>2</archiveVersion>
|
<archiveVersion>2</archiveVersion>
|
||||||
<data>
|
<data>
|
||||||
<version>9</version>
|
<version>10</version>
|
||||||
<wantNonLocal>1</wantNonLocal>
|
<wantNonLocal>1</wantNonLocal>
|
||||||
<debug>1</debug>
|
<debug>1</debug>
|
||||||
<option>
|
<option>
|
||||||
|
@ -555,10 +606,6 @@
|
||||||
<name>AOutputFile</name>
|
<name>AOutputFile</name>
|
||||||
<state>$FILE_BNAME$.o</state>
|
<state>$FILE_BNAME$.o</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
|
||||||
<name>AMultibyteSupport</name>
|
|
||||||
<state>0</state>
|
|
||||||
</option>
|
|
||||||
<option>
|
<option>
|
||||||
<name>ALimitErrorsCheck</name>
|
<name>ALimitErrorsCheck</name>
|
||||||
<state>0</state>
|
<state>0</state>
|
||||||
|
@ -574,6 +621,7 @@
|
||||||
<option>
|
<option>
|
||||||
<name>AUserIncludes</name>
|
<name>AUserIncludes</name>
|
||||||
<state>$PROJ_DIR$/.</state>
|
<state>$PROJ_DIR$/.</state>
|
||||||
|
<state>$PROJ_DIR$\..\..\Source\portable\IAR\ARM_CA5_No_GIC</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>AExtraOptionsCheckV2</name>
|
<name>AExtraOptionsCheckV2</name>
|
||||||
|
@ -598,8 +646,8 @@
|
||||||
<debug>1</debug>
|
<debug>1</debug>
|
||||||
<option>
|
<option>
|
||||||
<name>OOCOutputFormat</name>
|
<name>OOCOutputFormat</name>
|
||||||
<version>2</version>
|
<version>3</version>
|
||||||
<state>2</state>
|
<state>3</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>OCOutputOverride</name>
|
<name>OCOutputOverride</name>
|
||||||
|
@ -625,12 +673,13 @@
|
||||||
<data>
|
<data>
|
||||||
<extensions></extensions>
|
<extensions></extensions>
|
||||||
<cmdline></cmdline>
|
<cmdline></cmdline>
|
||||||
|
<hasPrio>0</hasPrio>
|
||||||
</data>
|
</data>
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
<name>BICOMP</name>
|
<name>BICOMP</name>
|
||||||
<archiveVersion>0</archiveVersion>
|
<archiveVersion>0</archiveVersion>
|
||||||
<data/>
|
<data />
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
<name>BUILDACTION</name>
|
<name>BUILDACTION</name>
|
||||||
|
@ -644,7 +693,7 @@
|
||||||
<name>ILINK</name>
|
<name>ILINK</name>
|
||||||
<archiveVersion>0</archiveVersion>
|
<archiveVersion>0</archiveVersion>
|
||||||
<data>
|
<data>
|
||||||
<version>16</version>
|
<version>20</version>
|
||||||
<wantNonLocal>1</wantNonLocal>
|
<wantNonLocal>1</wantNonLocal>
|
||||||
<debug>1</debug>
|
<debug>1</debug>
|
||||||
<option>
|
<option>
|
||||||
|
@ -916,7 +965,7 @@
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>CrcAlgorithm</name>
|
<name>CrcAlgorithm</name>
|
||||||
<version>0</version>
|
<version>1</version>
|
||||||
<state>1</state>
|
<state>1</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
|
@ -928,6 +977,34 @@
|
||||||
<name>IlinkThreadsSlave</name>
|
<name>IlinkThreadsSlave</name>
|
||||||
<state>1</state>
|
<state>1</state>
|
||||||
</option>
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IlinkLogCallGraph</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IlinkIcfFile_AltDefault</name>
|
||||||
|
<state></state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IlinkEncInput</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IlinkEncOutput</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IlinkEncOutputBom</name>
|
||||||
|
<state>1</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IlinkHeapSelect</name>
|
||||||
|
<state>1</state>
|
||||||
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>IlinkLocaleSelect</name>
|
||||||
|
<state>1</state>
|
||||||
|
</option>
|
||||||
</data>
|
</data>
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
|
@ -954,7 +1031,7 @@
|
||||||
<settings>
|
<settings>
|
||||||
<name>BILINK</name>
|
<name>BILINK</name>
|
||||||
<archiveVersion>0</archiveVersion>
|
<archiveVersion>0</archiveVersion>
|
||||||
<data/>
|
<data />
|
||||||
</settings>
|
</settings>
|
||||||
</configuration>
|
</configuration>
|
||||||
<group>
|
<group>
|
||||||
|
@ -1201,5 +1278,3 @@
|
||||||
<name>$PROJ_DIR$\main.c</name>
|
<name>$PROJ_DIR$\main.c</name>
|
||||||
</file>
|
</file>
|
||||||
</project>
|
</project>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
<crun>
|
<crun>
|
||||||
<version>1</version>
|
<version>1</version>
|
||||||
<filter_entries>
|
<filter_entries>
|
||||||
|
@ -12,5 +11,3 @@
|
||||||
</filter>
|
</filter>
|
||||||
</filter_entries>
|
</filter_entries>
|
||||||
</crun>
|
</crun>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,44 +1,224 @@
|
||||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
<?xml version="1.0"?>
|
||||||
|
|
||||||
<Project>
|
<Project>
|
||||||
<Desktop>
|
<Desktop>
|
||||||
<Static>
|
<Static>
|
||||||
<Debug-Log>
|
<Debug-Log>
|
||||||
|
<PreferedWindows>
|
||||||
|
<Position>3</Position>
|
||||||
<PreferedWindows><Position>3</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows><Window><Factory>Build</Factory></Window><Window><Factory>Find-in-Files</Factory></Window></Windows></PreferedWindows><ColumnWidth0>20</ColumnWidth0><ColumnWidth1>1622</ColumnWidth1></Debug-Log>
|
<ScreenPosX>0</ScreenPosX>
|
||||||
|
<ScreenPosY>0</ScreenPosY>
|
||||||
|
<Windows>
|
||||||
|
<Window>
|
||||||
|
<Factory>Build</Factory>
|
||||||
|
</Window>
|
||||||
|
<Window>
|
||||||
|
<Factory>Find-in-Files</Factory>
|
||||||
|
</Window>
|
||||||
|
</Windows>
|
||||||
|
</PreferedWindows>
|
||||||
|
<ColumnWidth0>20</ColumnWidth0>
|
||||||
|
<ColumnWidth1>1622</ColumnWidth1>
|
||||||
|
</Debug-Log>
|
||||||
<Build>
|
<Build>
|
||||||
|
<ColumnWidth0>20</ColumnWidth0>
|
||||||
|
<ColumnWidth1>1216</ColumnWidth1>
|
||||||
|
<ColumnWidth2>324</ColumnWidth2>
|
||||||
|
<ColumnWidth3>81</ColumnWidth3>
|
||||||
<ColumnWidth0>20</ColumnWidth0><ColumnWidth1>1216</ColumnWidth1><ColumnWidth2>324</ColumnWidth2><ColumnWidth3>81</ColumnWidth3><PreferedWindows><Position>3</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows><Window><Factory>Debug-Log</Factory></Window><Window><Factory>Find-in-Files</Factory></Window></Windows></PreferedWindows></Build>
|
<PreferedWindows>
|
||||||
|
<Position>3</Position>
|
||||||
|
<ScreenPosX>0</ScreenPosX>
|
||||||
|
<ScreenPosY>0</ScreenPosY>
|
||||||
|
<Windows>
|
||||||
|
<Window>
|
||||||
|
<Factory>Debug-Log</Factory>
|
||||||
|
</Window>
|
||||||
|
<Window>
|
||||||
|
<Factory>Find-in-Files</Factory>
|
||||||
|
</Window>
|
||||||
|
</Windows>
|
||||||
|
</PreferedWindows>
|
||||||
|
</Build>
|
||||||
<Workspace>
|
<Workspace>
|
||||||
<ColumnWidths>
|
<ColumnWidths>
|
||||||
|
<Column0>242</Column0>
|
||||||
|
<Column1>27</Column1>
|
||||||
|
<Column2>27</Column2>
|
||||||
|
<Column3>27</Column3>
|
||||||
<Column0>242</Column0><Column1>27</Column1><Column2>27</Column2><Column3>27</Column3></ColumnWidths>
|
</ColumnWidths>
|
||||||
</Workspace>
|
</Workspace>
|
||||||
<Disassembly>
|
<Disassembly>
|
||||||
<col-names>
|
<col-names>
|
||||||
|
<item>Disassembly</item>
|
||||||
|
<item>_I0</item>
|
||||||
<item>Disassembly</item><item>_I0</item></col-names>
|
</col-names>
|
||||||
<col-widths>
|
<col-widths>
|
||||||
|
<item>500</item>
|
||||||
|
<item>20</item>
|
||||||
<item>500</item><item>20</item></col-widths>
|
</col-widths>
|
||||||
<DisasmHistory><item>0x305444</item><item>0x0030211C</item><item>0x00302750</item></DisasmHistory>
|
<DisasmHistory>
|
||||||
|
<item>0x305444</item>
|
||||||
|
<item>0x0030211C</item>
|
||||||
<PreferedWindows><Position>2</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows><ShowCodeCoverage>1</ShowCodeCoverage><ShowInstrProfiling>1</ShowInstrProfiling></Disassembly>
|
<item>0x00302750</item>
|
||||||
<Register><PreferedWindows><Position>2</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows></Register><WATCH_1><expressions><item/></expressions><col-names><item>Expression</item><item>Location</item><item>Type</item><item>Value</item></col-names><col-widths><item>207</item><item>150</item><item>100</item><item>294</item></col-widths><PreferedWindows><Position>2</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows></WATCH_1><CallStack><PreferedWindows><Position>1</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows><col-names><item>Frame</item><item>_I0</item></col-names><col-widths><item>400</item><item>20</item></col-widths></CallStack><Breakpoints><PreferedWindows><Position>3</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows><col-names><item>Breakpoint</item><item>_I0</item></col-names><col-widths><item>500</item><item>35</item></col-widths></Breakpoints><Find-in-Files><ColumnWidth0>497</ColumnWidth0><ColumnWidth1>82</ColumnWidth1><ColumnWidth2>746</ColumnWidth2><ColumnWidth3>331</ColumnWidth3><PreferedWindows><Position>3</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows><Window><Factory>Debug-Log</Factory></Window><Window><Factory>Build</Factory></Window></Windows></PreferedWindows></Find-in-Files><QuickWatch><PreferedWindows><Position>2</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows><col-names><item>Expression</item><item>Location</item><item>Type</item><item>Value</item></col-names><col-widths><item>100</item><item>150</item><item>100</item><item>100</item></col-widths><QWatchHistory><item>TC0</item><item>TC0->TC_CHANNEL[ tmrTC0_CHANNEL_0 ].TC_RC</item></QWatchHistory></QuickWatch><Memory><PreferedWindows><Position>3</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows><FindDirection>1</FindDirection><FindAsHex>0</FindAsHex></Memory><TASKVIEW><PreferedWindows><Position>3</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows><Column0>200</Column0><Column1>100</Column1><Column2>100</Column2><Column3>100</Column3><Column4>100</Column4><Column5>100</Column5><Column6>100</Column6><Column7>100</Column7><Column8>150</Column8></TASKVIEW><QUEUEVIEW><PreferedWindows><Position>3</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows><Column0>300</Column0><Column1>100</Column1><Column2>100</Column2><Column3>100</Column3><Column4>100</Column4><Column5>100</Column5><Column6>100</Column6></QUEUEVIEW></Static>
|
</DisasmHistory>
|
||||||
|
<PreferedWindows>
|
||||||
|
<Position>2</Position>
|
||||||
|
<ScreenPosX>0</ScreenPosX>
|
||||||
|
<ScreenPosY>0</ScreenPosY>
|
||||||
|
<Windows />
|
||||||
|
</PreferedWindows>
|
||||||
|
<ShowCodeCoverage>1</ShowCodeCoverage>
|
||||||
|
<ShowInstrProfiling>1</ShowInstrProfiling>
|
||||||
|
</Disassembly>
|
||||||
|
<Register>
|
||||||
|
<PreferedWindows>
|
||||||
|
<Position>2</Position>
|
||||||
|
<ScreenPosX>0</ScreenPosX>
|
||||||
|
<ScreenPosY>0</ScreenPosY>
|
||||||
|
<Windows />
|
||||||
|
</PreferedWindows>
|
||||||
|
</Register>
|
||||||
|
<WATCH_1>
|
||||||
|
<expressions>
|
||||||
|
<item />
|
||||||
|
</expressions>
|
||||||
|
<col-names>
|
||||||
|
<item>Expression</item>
|
||||||
|
<item>Location</item>
|
||||||
|
<item>Type</item>
|
||||||
|
<item>Value</item>
|
||||||
|
</col-names>
|
||||||
|
<col-widths>
|
||||||
|
<item>207</item>
|
||||||
|
<item>150</item>
|
||||||
|
<item>100</item>
|
||||||
|
<item>294</item>
|
||||||
|
</col-widths>
|
||||||
|
<PreferedWindows>
|
||||||
|
<Position>2</Position>
|
||||||
|
<ScreenPosX>0</ScreenPosX>
|
||||||
|
<ScreenPosY>0</ScreenPosY>
|
||||||
|
<Windows />
|
||||||
|
</PreferedWindows>
|
||||||
|
</WATCH_1>
|
||||||
|
<CallStack>
|
||||||
|
<PreferedWindows>
|
||||||
|
<Position>1</Position>
|
||||||
|
<ScreenPosX>0</ScreenPosX>
|
||||||
|
<ScreenPosY>0</ScreenPosY>
|
||||||
|
<Windows />
|
||||||
|
</PreferedWindows>
|
||||||
|
<col-names>
|
||||||
|
<item>Frame</item>
|
||||||
|
<item>_I0</item>
|
||||||
|
</col-names>
|
||||||
|
<col-widths>
|
||||||
|
<item>400</item>
|
||||||
|
<item>20</item>
|
||||||
|
</col-widths>
|
||||||
|
</CallStack>
|
||||||
|
<Breakpoints>
|
||||||
|
<PreferedWindows>
|
||||||
|
<Position>3</Position>
|
||||||
|
<ScreenPosX>0</ScreenPosX>
|
||||||
|
<ScreenPosY>0</ScreenPosY>
|
||||||
|
<Windows />
|
||||||
|
</PreferedWindows>
|
||||||
|
<col-names>
|
||||||
|
<item>Breakpoint</item>
|
||||||
|
<item>_I0</item>
|
||||||
|
</col-names>
|
||||||
|
<col-widths>
|
||||||
|
<item>500</item>
|
||||||
|
<item>35</item>
|
||||||
|
</col-widths>
|
||||||
|
</Breakpoints>
|
||||||
|
<Find-in-Files>
|
||||||
|
<ColumnWidth0>497</ColumnWidth0>
|
||||||
|
<ColumnWidth1>82</ColumnWidth1>
|
||||||
|
<ColumnWidth2>746</ColumnWidth2>
|
||||||
|
<ColumnWidth3>331</ColumnWidth3>
|
||||||
|
<PreferedWindows>
|
||||||
|
<Position>3</Position>
|
||||||
|
<ScreenPosX>0</ScreenPosX>
|
||||||
|
<ScreenPosY>0</ScreenPosY>
|
||||||
|
<Windows>
|
||||||
|
<Window>
|
||||||
|
<Factory>Debug-Log</Factory>
|
||||||
|
</Window>
|
||||||
|
<Window>
|
||||||
|
<Factory>Build</Factory>
|
||||||
|
</Window>
|
||||||
|
</Windows>
|
||||||
|
</PreferedWindows>
|
||||||
|
</Find-in-Files>
|
||||||
|
<QuickWatch>
|
||||||
|
<PreferedWindows>
|
||||||
|
<Position>2</Position>
|
||||||
|
<ScreenPosX>0</ScreenPosX>
|
||||||
|
<ScreenPosY>0</ScreenPosY>
|
||||||
|
<Windows />
|
||||||
|
</PreferedWindows>
|
||||||
|
<col-names>
|
||||||
|
<item>Expression</item>
|
||||||
|
<item>Location</item>
|
||||||
|
<item>Type</item>
|
||||||
|
<item>Value</item>
|
||||||
|
</col-names>
|
||||||
|
<col-widths>
|
||||||
|
<item>100</item>
|
||||||
|
<item>150</item>
|
||||||
|
<item>100</item>
|
||||||
|
<item>100</item>
|
||||||
|
</col-widths>
|
||||||
|
<QWatchHistory>
|
||||||
|
<item>TC0</item>
|
||||||
|
<item>TC0->TC_CHANNEL[ tmrTC0_CHANNEL_0 ].TC_RC</item>
|
||||||
|
</QWatchHistory>
|
||||||
|
</QuickWatch>
|
||||||
|
<Memory>
|
||||||
|
<PreferedWindows>
|
||||||
|
<Position>3</Position>
|
||||||
|
<ScreenPosX>0</ScreenPosX>
|
||||||
|
<ScreenPosY>0</ScreenPosY>
|
||||||
|
<Windows />
|
||||||
|
</PreferedWindows>
|
||||||
|
<FindDirection>1</FindDirection>
|
||||||
|
<FindAsHex>0</FindAsHex>
|
||||||
|
</Memory>
|
||||||
|
<TASKVIEW>
|
||||||
|
<PreferedWindows>
|
||||||
|
<Position>3</Position>
|
||||||
|
<ScreenPosX>0</ScreenPosX>
|
||||||
|
<ScreenPosY>0</ScreenPosY>
|
||||||
|
<Windows />
|
||||||
|
</PreferedWindows>
|
||||||
|
<Column0>200</Column0>
|
||||||
|
<Column1>100</Column1>
|
||||||
|
<Column2>100</Column2>
|
||||||
|
<Column3>100</Column3>
|
||||||
|
<Column4>100</Column4>
|
||||||
|
<Column5>100</Column5>
|
||||||
|
<Column6>100</Column6>
|
||||||
|
<Column7>100</Column7>
|
||||||
|
<Column8>150</Column8>
|
||||||
|
</TASKVIEW>
|
||||||
|
<QUEUEVIEW>
|
||||||
|
<PreferedWindows>
|
||||||
|
<Position>3</Position>
|
||||||
|
<ScreenPosX>0</ScreenPosX>
|
||||||
|
<ScreenPosY>0</ScreenPosY>
|
||||||
|
<Windows />
|
||||||
|
</PreferedWindows>
|
||||||
|
<Column0>300</Column0>
|
||||||
|
<Column1>100</Column1>
|
||||||
|
<Column2>100</Column2>
|
||||||
|
<Column3>100</Column3>
|
||||||
|
<Column4>100</Column4>
|
||||||
|
<Column5>100</Column5>
|
||||||
|
<Column6>100</Column6>
|
||||||
|
</QUEUEVIEW>
|
||||||
|
</Static>
|
||||||
<Windows>
|
<Windows>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<Wnd0>
|
<Wnd0>
|
||||||
<Tabs>
|
<Tabs>
|
||||||
<Tab>
|
<Tab>
|
||||||
|
@ -46,26 +226,153 @@
|
||||||
<TabName>Workspace</TabName>
|
<TabName>Workspace</TabName>
|
||||||
<Factory>Workspace</Factory>
|
<Factory>Workspace</Factory>
|
||||||
<Session>
|
<Session>
|
||||||
|
<NodeDict>
|
||||||
<NodeDict><ExpandedNode>RTOSDemo</ExpandedNode><ExpandedNode>RTOSDemo/Atmel Files</ExpandedNode><ExpandedNode>RTOSDemo/Atmel Files/libchip_sama5d3x</ExpandedNode><ExpandedNode>RTOSDemo/FreeRTOS Source</ExpandedNode><ExpandedNode>RTOSDemo/FreeRTOS Source/portable</ExpandedNode><ExpandedNode>RTOSDemo/FreeRTOS Source/portable/MemMang</ExpandedNode><ExpandedNode>RTOSDemo/FreeRTOS+CLI</ExpandedNode><ExpandedNode>RTOSDemo/Full Demo</ExpandedNode><ExpandedNode>RTOSDemo/Full Demo/Common Demo Tasks</ExpandedNode></NodeDict></Session>
|
<ExpandedNode>RTOSDemo</ExpandedNode>
|
||||||
|
<ExpandedNode>RTOSDemo/Atmel Files</ExpandedNode>
|
||||||
|
<ExpandedNode>RTOSDemo/Atmel Files/libchip_sama5d3x</ExpandedNode>
|
||||||
|
<ExpandedNode>RTOSDemo/FreeRTOS Source</ExpandedNode>
|
||||||
|
<ExpandedNode>RTOSDemo/FreeRTOS Source/portable</ExpandedNode>
|
||||||
|
<ExpandedNode>RTOSDemo/FreeRTOS Source/portable/MemMang</ExpandedNode>
|
||||||
|
<ExpandedNode>RTOSDemo/FreeRTOS+CLI</ExpandedNode>
|
||||||
|
<ExpandedNode>RTOSDemo/Full Demo</ExpandedNode>
|
||||||
|
<ExpandedNode>RTOSDemo/Full Demo/Common Demo Tasks</ExpandedNode>
|
||||||
|
</NodeDict>
|
||||||
|
</Session>
|
||||||
</Tab>
|
</Tab>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
|
<SelectedTab>0</SelectedTab>
|
||||||
<SelectedTab>0</SelectedTab></Wnd0><Wnd3><Tabs><Tab><Identity>TabID-31713-7906</Identity><TabName>Debug Log</TabName><Factory>Debug-Log</Factory><Session/></Tab></Tabs><SelectedTab>0</SelectedTab></Wnd3></Windows>
|
</Wnd0>
|
||||||
|
<Wnd3>
|
||||||
|
<Tabs>
|
||||||
|
<Tab>
|
||||||
|
<Identity>TabID-31713-7906</Identity>
|
||||||
|
<TabName>Debug Log</TabName>
|
||||||
|
<Factory>Debug-Log</Factory>
|
||||||
|
<Session />
|
||||||
|
</Tab>
|
||||||
|
</Tabs>
|
||||||
|
<SelectedTab>0</SelectedTab>
|
||||||
|
</Wnd3>
|
||||||
|
</Windows>
|
||||||
<Editor>
|
<Editor>
|
||||||
|
<Pane>
|
||||||
|
<Tab>
|
||||||
|
<Factory>TextEditor</Factory>
|
||||||
|
<Filename>$WS_DIR$\CDCCommandConsole.c</Filename>
|
||||||
<Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\CDCCommandConsole.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>441</YPos2><SelStart2>16342</SelStart2><SelEnd2>16359</SelEnd2></Tab><ActiveTab>0</ActiveTab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\main.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>111</YPos2><SelStart2>6131</SelStart2><SelEnd2>6131</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\Source\portable\IAR\ARM_CA5_No_GIC\portASM.s</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>117</YPos2><SelStart2>5123</SelStart2><SelEnd2>5123</SelEnd2></Tab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>
|
<XPos>0</XPos>
|
||||||
|
<YPos>0</YPos>
|
||||||
|
<SelStart>0</SelStart>
|
||||||
|
<SelEnd>0</SelEnd>
|
||||||
|
<XPos2>0</XPos2>
|
||||||
|
<YPos2>441</YPos2>
|
||||||
|
<SelStart2>16342</SelStart2>
|
||||||
|
<SelEnd2>16359</SelEnd2>
|
||||||
|
</Tab>
|
||||||
|
<ActiveTab>0</ActiveTab>
|
||||||
|
<Tab>
|
||||||
|
<Factory>TextEditor</Factory>
|
||||||
|
<Filename>$WS_DIR$\main.c</Filename>
|
||||||
|
<XPos>0</XPos>
|
||||||
|
<YPos>0</YPos>
|
||||||
|
<SelStart>0</SelStart>
|
||||||
|
<SelEnd>0</SelEnd>
|
||||||
|
<XPos2>0</XPos2>
|
||||||
|
<YPos2>111</YPos2>
|
||||||
|
<SelStart2>6131</SelStart2>
|
||||||
|
<SelEnd2>6131</SelEnd2>
|
||||||
|
</Tab>
|
||||||
|
<Tab>
|
||||||
|
<Factory>TextEditor</Factory>
|
||||||
|
<Filename>$WS_DIR$\..\..\Source\portable\IAR\ARM_CA5_No_GIC\portASM.s</Filename>
|
||||||
|
<XPos>0</XPos>
|
||||||
|
<YPos>0</YPos>
|
||||||
|
<SelStart>0</SelStart>
|
||||||
|
<SelEnd>0</SelEnd>
|
||||||
|
<XPos2>0</XPos2>
|
||||||
|
<YPos2>117</YPos2>
|
||||||
|
<SelStart2>5123</SelStart2>
|
||||||
|
<SelEnd2>5123</SelEnd2>
|
||||||
|
</Tab>
|
||||||
|
</Pane>
|
||||||
|
<ActivePane>0</ActivePane>
|
||||||
|
<Sizes>
|
||||||
|
<Pane>
|
||||||
|
<X>1000000</X>
|
||||||
|
<Y>1000000</Y>
|
||||||
|
</Pane>
|
||||||
|
</Sizes>
|
||||||
|
<SplitMode>1</SplitMode>
|
||||||
|
</Editor>
|
||||||
<Positions>
|
<Positions>
|
||||||
|
<Top>
|
||||||
|
<Row0>
|
||||||
|
<Sizes>
|
||||||
|
<Toolbar-002781D8>
|
||||||
|
<key>iaridepm.enu1</key>
|
||||||
<Top><Row0><Sizes><Toolbar-002781D8><key>iaridepm.enu1</key></Toolbar-002781D8></Sizes></Row0><Row1><Sizes><Toolbar-1A6225A0><key>debuggergui.enu1</key></Toolbar-1A6225A0></Sizes></Row1></Top><Left><Row0><Sizes><Wnd0><Rect><Top>-2</Top><Left>-2</Left><Bottom>718</Bottom><Right>332</Right><x>-2</x><y>-2</y><xscreen>200</xscreen><yscreen>200</yscreen><sizeHorzCX>119048</sizeHorzCX><sizeHorzCY>203252</sizeHorzCY><sizeVertCX>198810</sizeVertCX><sizeVertCY>731707</sizeVertCY></Rect></Wnd0></Sizes></Row0></Left><Right><Row0><Sizes/></Row0></Right><Bottom><Row0><Sizes><Wnd3><Rect><Top>-2</Top><Left>-2</Left><Bottom>198</Bottom><Right>1682</Right><x>-2</x><y>-2</y><xscreen>1684</xscreen><yscreen>200</yscreen><sizeHorzCX>1002381</sizeHorzCX><sizeHorzCY>203252</sizeHorzCY><sizeVertCX>119048</sizeVertCX><sizeVertCY>203252</sizeVertCY></Rect></Wnd3></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions>
|
</Toolbar-002781D8>
|
||||||
|
</Sizes>
|
||||||
|
</Row0>
|
||||||
|
<Row1>
|
||||||
|
<Sizes>
|
||||||
|
<Toolbar-1A6225A0>
|
||||||
|
<key>debuggergui.enu1</key>
|
||||||
|
</Toolbar-1A6225A0>
|
||||||
|
</Sizes>
|
||||||
|
</Row1>
|
||||||
|
</Top>
|
||||||
|
<Left>
|
||||||
|
<Row0>
|
||||||
|
<Sizes>
|
||||||
|
<Wnd0>
|
||||||
|
<Rect>
|
||||||
|
<Top>-2</Top>
|
||||||
|
<Left>-2</Left>
|
||||||
|
<Bottom>718</Bottom>
|
||||||
|
<Right>332</Right>
|
||||||
|
<x>-2</x>
|
||||||
|
<y>-2</y>
|
||||||
|
<xscreen>200</xscreen>
|
||||||
|
<yscreen>200</yscreen>
|
||||||
|
<sizeHorzCX>119048</sizeHorzCX>
|
||||||
|
<sizeHorzCY>203252</sizeHorzCY>
|
||||||
|
<sizeVertCX>198810</sizeVertCX>
|
||||||
|
<sizeVertCY>731707</sizeVertCY>
|
||||||
|
</Rect>
|
||||||
|
</Wnd0>
|
||||||
|
</Sizes>
|
||||||
|
</Row0>
|
||||||
|
</Left>
|
||||||
|
<Right>
|
||||||
|
<Row0>
|
||||||
|
<Sizes />
|
||||||
|
</Row0>
|
||||||
|
</Right>
|
||||||
|
<Bottom>
|
||||||
|
<Row0>
|
||||||
|
<Sizes>
|
||||||
|
<Wnd3>
|
||||||
|
<Rect>
|
||||||
|
<Top>-2</Top>
|
||||||
|
<Left>-2</Left>
|
||||||
|
<Bottom>198</Bottom>
|
||||||
|
<Right>1682</Right>
|
||||||
|
<x>-2</x>
|
||||||
|
<y>-2</y>
|
||||||
|
<xscreen>1684</xscreen>
|
||||||
|
<yscreen>200</yscreen>
|
||||||
|
<sizeHorzCX>1002381</sizeHorzCX>
|
||||||
|
<sizeHorzCY>203252</sizeHorzCY>
|
||||||
|
<sizeVertCX>119048</sizeVertCX>
|
||||||
|
<sizeVertCY>203252</sizeVertCY>
|
||||||
|
</Rect>
|
||||||
|
</Wnd3>
|
||||||
|
</Sizes>
|
||||||
|
</Row0>
|
||||||
|
</Bottom>
|
||||||
|
<Float>
|
||||||
|
<Sizes />
|
||||||
|
</Float>
|
||||||
|
</Positions>
|
||||||
</Desktop>
|
</Desktop>
|
||||||
|
<WindowStorage />
|
||||||
</Project>
|
</Project>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,22 @@
|
||||||
@REM
|
@REM
|
||||||
|
|
||||||
|
|
||||||
"C:\DevTools\IAR Systems\Embedded Workbench 7.0\common\bin\cspybat" "C:\DevTools\IAR Systems\Embedded Workbench 7.0\arm\bin\armproc.dll" "C:\DevTools\IAR Systems\Embedded Workbench 7.0\arm\bin\armjlink.dll" %1 --plugin "C:\DevTools\IAR Systems\Embedded Workbench 7.0\arm\bin\armbat.dll" --macro "C:\E\Dev\FreeRTOS\WorkingCopy\FreeRTOS\Demo\CORTEX_A5_SAMA5D3x_Xplained_IAR\AtmelFiles\libboard_sama5d3x-ek\resources\ewarm\sama5d3x-ek-sram.mac" --backend -B "--endian=little" "--cpu=Cortex-A5" "--fpu=VFPv4Neon" "-p" "C:\DevTools\IAR Systems\Embedded Workbench 7.0\arm\CONFIG\debugger\Atmel\ATSAMA5D35.ddf" "--drv_verify_download" "--semihosting=none" "--device=ATSAMA5D35" "--drv_communication=USB0" "--jlink_speed=auto" "--jlink_initial_speed=32" "--drv_catch_exceptions=0x000" "--jlink_reset_strategy=0,0"
|
@echo off
|
||||||
|
|
||||||
|
if not "%~1" == "" goto debugFile
|
||||||
|
|
||||||
|
@echo on
|
||||||
|
|
||||||
|
"C:\devtools\IAR Systems\Embedded Workbench 8.0\common\bin\cspybat" -f "C:\Users\ribarry\Dev\FreeRTOS\WorkingCopy\FreeRTOS\Demo\CORTEX_A5_SAMA5D3x_Xplained_IAR\settings\RTOSDemo.sram.general.xcl" --backend -f "C:\Users\ribarry\Dev\FreeRTOS\WorkingCopy\FreeRTOS\Demo\CORTEX_A5_SAMA5D3x_Xplained_IAR\settings\RTOSDemo.sram.driver.xcl"
|
||||||
|
|
||||||
|
@echo off
|
||||||
|
goto end
|
||||||
|
|
||||||
|
:debugFile
|
||||||
|
|
||||||
|
@echo on
|
||||||
|
|
||||||
|
"C:\devtools\IAR Systems\Embedded Workbench 8.0\common\bin\cspybat" -f "C:\Users\ribarry\Dev\FreeRTOS\WorkingCopy\FreeRTOS\Demo\CORTEX_A5_SAMA5D3x_Xplained_IAR\settings\RTOSDemo.sram.general.xcl" "--debug_file=%~1" --backend -f "C:\Users\ribarry\Dev\FreeRTOS\WorkingCopy\FreeRTOS\Demo\CORTEX_A5_SAMA5D3x_Xplained_IAR\settings\RTOSDemo.sram.driver.xcl"
|
||||||
|
|
||||||
|
@echo off
|
||||||
|
:end
|
|
@ -1,18 +1,19 @@
|
||||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
<?xml version="1.0"?>
|
||||||
|
|
||||||
<Workspace>
|
<Workspace>
|
||||||
<ConfigDictionary>
|
<ConfigDictionary>
|
||||||
|
<CurrentConfigs>
|
||||||
<CurrentConfigs><Project>RTOSDemo/sram</Project></CurrentConfigs></ConfigDictionary>
|
<Project>RTOSDemo/sram</Project>
|
||||||
|
</CurrentConfigs>
|
||||||
|
</ConfigDictionary>
|
||||||
<Desktop>
|
<Desktop>
|
||||||
<Static>
|
<Static>
|
||||||
<Workspace>
|
<Workspace>
|
||||||
<ColumnWidths>
|
<ColumnWidths>
|
||||||
|
<Column0>278</Column0>
|
||||||
|
<Column1>27</Column1>
|
||||||
|
<Column2>27</Column2>
|
||||||
|
<Column3>27</Column3>
|
||||||
<Column0>278</Column0><Column1>27</Column1><Column2>27</Column2><Column3>27</Column3></ColumnWidths>
|
</ColumnWidths>
|
||||||
</Workspace>
|
</Workspace>
|
||||||
<CRunMessageRules>
|
<CRunMessageRules>
|
||||||
<col-names>
|
<col-names>
|
||||||
|
@ -27,15 +28,45 @@
|
||||||
</col-widths>
|
</col-widths>
|
||||||
</CRunMessageRules>
|
</CRunMessageRules>
|
||||||
<Build>
|
<Build>
|
||||||
|
<ColumnWidth0>20</ColumnWidth0>
|
||||||
|
<ColumnWidth1>1216</ColumnWidth1>
|
||||||
|
<ColumnWidth2>324</ColumnWidth2>
|
||||||
|
<ColumnWidth3>81</ColumnWidth3>
|
||||||
<ColumnWidth0>20</ColumnWidth0><ColumnWidth1>1216</ColumnWidth1><ColumnWidth2>324</ColumnWidth2><ColumnWidth3>81</ColumnWidth3></Build>
|
</Build>
|
||||||
<Debug-Log><ColumnWidth0>18</ColumnWidth0><ColumnWidth1>1624</ColumnWidth1></Debug-Log><TerminalIO/><Select-Ambiguous-Definitions><ColumnWidth0>552</ColumnWidth0><ColumnWidth1>78</ColumnWidth1><ColumnWidth2>946</ColumnWidth2></Select-Ambiguous-Definitions><Find-in-Files><ColumnWidth0>846</ColumnWidth0><ColumnWidth1>82</ColumnWidth1><ColumnWidth2>746</ColumnWidth2><ColumnWidth3>331</ColumnWidth3></Find-in-Files><Breakpoints><col-names><item>Breakpoint</item><item>_I0</item></col-names><col-widths><item>500</item><item>35</item></col-widths><PreferedWindows><Position>3</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows></Breakpoints></Static>
|
<Debug-Log>
|
||||||
|
<ColumnWidth0>18</ColumnWidth0>
|
||||||
|
<ColumnWidth1>1624</ColumnWidth1>
|
||||||
|
</Debug-Log>
|
||||||
|
<TerminalIO />
|
||||||
|
<Select-Ambiguous-Definitions>
|
||||||
|
<ColumnWidth0>552</ColumnWidth0>
|
||||||
|
<ColumnWidth1>78</ColumnWidth1>
|
||||||
|
<ColumnWidth2>946</ColumnWidth2>
|
||||||
|
</Select-Ambiguous-Definitions>
|
||||||
|
<Find-in-Files>
|
||||||
|
<ColumnWidth0>846</ColumnWidth0>
|
||||||
|
<ColumnWidth1>82</ColumnWidth1>
|
||||||
|
<ColumnWidth2>746</ColumnWidth2>
|
||||||
|
<ColumnWidth3>331</ColumnWidth3>
|
||||||
|
</Find-in-Files>
|
||||||
|
<Breakpoints>
|
||||||
|
<col-names>
|
||||||
|
<item>Breakpoint</item>
|
||||||
|
<item>_I0</item>
|
||||||
|
</col-names>
|
||||||
|
<col-widths>
|
||||||
|
<item>500</item>
|
||||||
|
<item>35</item>
|
||||||
|
</col-widths>
|
||||||
|
<PreferedWindows>
|
||||||
|
<Position>3</Position>
|
||||||
|
<ScreenPosX>0</ScreenPosX>
|
||||||
|
<ScreenPosY>0</ScreenPosY>
|
||||||
|
<Windows />
|
||||||
|
</PreferedWindows>
|
||||||
|
</Breakpoints>
|
||||||
|
</Static>
|
||||||
<Windows>
|
<Windows>
|
||||||
|
|
||||||
|
|
||||||
<Wnd2>
|
<Wnd2>
|
||||||
<Tabs>
|
<Tabs>
|
||||||
<Tab>
|
<Tab>
|
||||||
|
@ -43,36 +74,535 @@
|
||||||
<TabName>Workspace</TabName>
|
<TabName>Workspace</TabName>
|
||||||
<Factory>Workspace</Factory>
|
<Factory>Workspace</Factory>
|
||||||
<Session>
|
<Session>
|
||||||
|
<NodeDict>
|
||||||
<NodeDict><ExpandedNode>RTOSDemo</ExpandedNode></NodeDict></Session>
|
<ExpandedNode>RTOSDemo</ExpandedNode>
|
||||||
|
</NodeDict>
|
||||||
|
</Session>
|
||||||
</Tab>
|
</Tab>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
|
<SelectedTab>0</SelectedTab>
|
||||||
<SelectedTab>0</SelectedTab></Wnd2><Wnd3>
|
</Wnd2>
|
||||||
|
<Wnd3>
|
||||||
<Tabs>
|
<Tabs>
|
||||||
<Tab>
|
<Tab>
|
||||||
<Identity>TabID-21076-19237</Identity>
|
<Identity>TabID-21076-19237</Identity>
|
||||||
<TabName>Build</TabName>
|
<TabName>Build</TabName>
|
||||||
<Factory>Build</Factory>
|
<Factory>Build</Factory>
|
||||||
<Session/>
|
<Session />
|
||||||
</Tab>
|
</Tab>
|
||||||
<Tab><Identity>TabID-23502-23081</Identity><TabName>Debug Log</TabName><Factory>Debug-Log</Factory><Session/></Tab><Tab><Identity>TabID-24431-23894</Identity><TabName>Ambiguous Definitions</TabName><Factory>Select-Ambiguous-Definitions</Factory><Session/></Tab><Tab><Identity>TabID-9033-6116</Identity><TabName>Find in Files</TabName><Factory>Find-in-Files</Factory><Session/></Tab></Tabs>
|
<Tab>
|
||||||
|
<Identity>TabID-23502-23081</Identity>
|
||||||
<SelectedTab>0</SelectedTab></Wnd3></Windows>
|
<TabName>Debug Log</TabName>
|
||||||
|
<Factory>Debug-Log</Factory>
|
||||||
|
<Session />
|
||||||
|
</Tab>
|
||||||
|
<Tab>
|
||||||
|
<Identity>TabID-24431-23894</Identity>
|
||||||
|
<TabName>Ambiguous Definitions</TabName>
|
||||||
|
<Factory>Select-Ambiguous-Definitions</Factory>
|
||||||
|
<Session />
|
||||||
|
</Tab>
|
||||||
|
<Tab>
|
||||||
|
<Identity>TabID-9033-6116</Identity>
|
||||||
|
<TabName>Find in Files</TabName>
|
||||||
|
<Factory>Find-in-Files</Factory>
|
||||||
|
<Session />
|
||||||
|
</Tab>
|
||||||
|
</Tabs>
|
||||||
|
<SelectedTab>0</SelectedTab>
|
||||||
|
</Wnd3>
|
||||||
|
</Windows>
|
||||||
<Editor>
|
<Editor>
|
||||||
|
<Pane>
|
||||||
|
<Tab>
|
||||||
|
<Factory>TextEditor</Factory>
|
||||||
|
<Filename>$WS_DIR$\main.c</Filename>
|
||||||
<Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\main.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>63</YPos2><SelStart2>5118</SelStart2><SelEnd2>5118</SelEnd2></Tab><ActiveTab>0</ActiveTab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\blinky_demo\main_blinky.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>63</YPos2><SelStart2>0</SelStart2><SelEnd2>0</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\Full_Demo\main_full.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>63</YPos2><SelStart2>924</SelStart2><SelEnd2>924</SelEnd2></Tab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>
|
<XPos>0</XPos>
|
||||||
|
<YPos>0</YPos>
|
||||||
|
<SelStart>0</SelStart>
|
||||||
|
<SelEnd>0</SelEnd>
|
||||||
|
<XPos2>0</XPos2>
|
||||||
|
<YPos2>63</YPos2>
|
||||||
|
<SelStart2>5118</SelStart2>
|
||||||
|
<SelEnd2>5118</SelEnd2>
|
||||||
|
</Tab>
|
||||||
|
<ActiveTab>0</ActiveTab>
|
||||||
|
<Tab>
|
||||||
|
<Factory>TextEditor</Factory>
|
||||||
|
<Filename>$WS_DIR$\blinky_demo\main_blinky.c</Filename>
|
||||||
|
<XPos>0</XPos>
|
||||||
|
<YPos>0</YPos>
|
||||||
|
<SelStart>0</SelStart>
|
||||||
|
<SelEnd>0</SelEnd>
|
||||||
|
<XPos2>0</XPos2>
|
||||||
|
<YPos2>63</YPos2>
|
||||||
|
<SelStart2>0</SelStart2>
|
||||||
|
<SelEnd2>0</SelEnd2>
|
||||||
|
</Tab>
|
||||||
|
<Tab>
|
||||||
|
<Factory>TextEditor</Factory>
|
||||||
|
<Filename>$WS_DIR$\Full_Demo\main_full.c</Filename>
|
||||||
|
<XPos>0</XPos>
|
||||||
|
<YPos>0</YPos>
|
||||||
|
<SelStart>0</SelStart>
|
||||||
|
<SelEnd>0</SelEnd>
|
||||||
|
<XPos2>0</XPos2>
|
||||||
|
<YPos2>63</YPos2>
|
||||||
|
<SelStart2>924</SelStart2>
|
||||||
|
<SelEnd2>924</SelEnd2>
|
||||||
|
</Tab>
|
||||||
|
</Pane>
|
||||||
|
<ActivePane>0</ActivePane>
|
||||||
|
<Sizes>
|
||||||
|
<Pane>
|
||||||
|
<X>1000000</X>
|
||||||
|
<Y>1000000</Y>
|
||||||
|
</Pane>
|
||||||
|
</Sizes>
|
||||||
|
<SplitMode>1</SplitMode>
|
||||||
|
</Editor>
|
||||||
<Positions>
|
<Positions>
|
||||||
|
<Top>
|
||||||
|
<Row0>
|
||||||
|
<Sizes>
|
||||||
|
<Toolbar-002781D8>
|
||||||
|
<key>iaridepm.enu1</key>
|
||||||
<Top><Row0><Sizes><Toolbar-002781D8><key>iaridepm.enu1</key></Toolbar-002781D8></Sizes></Row0><Row1><Sizes/></Row1></Top><Left><Row0><Sizes><Wnd2><Rect><Top>-2</Top><Left>-2</Left><Bottom>668</Bottom><Right>352</Right><x>-2</x><y>-2</y><xscreen>190</xscreen><yscreen>170</yscreen><sizeHorzCX>113095</sizeHorzCX><sizeHorzCY>172764</sizeHorzCY><sizeVertCX>210714</sizeVertCX><sizeVertCY>680894</sizeVertCY></Rect></Wnd2></Sizes></Row0></Left><Right><Row0><Sizes/></Row0></Right><Bottom><Row0><Sizes><Wnd3><Rect><Top>-2</Top><Left>-2</Left><Bottom>272</Bottom><Right>1682</Right><x>-2</x><y>-2</y><xscreen>1684</xscreen><yscreen>274</yscreen><sizeHorzCX>1002381</sizeHorzCX><sizeHorzCY>278455</sizeHorzCY><sizeVertCX>113095</sizeVertCX><sizeVertCY>172764</sizeVertCY></Rect></Wnd3></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions>
|
</Toolbar-002781D8>
|
||||||
|
</Sizes>
|
||||||
|
</Row0>
|
||||||
|
<Row1>
|
||||||
|
<Sizes />
|
||||||
|
</Row1>
|
||||||
|
</Top>
|
||||||
|
<Left>
|
||||||
|
<Row0>
|
||||||
|
<Sizes>
|
||||||
|
<Wnd2>
|
||||||
|
<Rect>
|
||||||
|
<Top>-2</Top>
|
||||||
|
<Left>-2</Left>
|
||||||
|
<Bottom>668</Bottom>
|
||||||
|
<Right>352</Right>
|
||||||
|
<x>-2</x>
|
||||||
|
<y>-2</y>
|
||||||
|
<xscreen>190</xscreen>
|
||||||
|
<yscreen>170</yscreen>
|
||||||
|
<sizeHorzCX>113095</sizeHorzCX>
|
||||||
|
<sizeHorzCY>172764</sizeHorzCY>
|
||||||
|
<sizeVertCX>210714</sizeVertCX>
|
||||||
|
<sizeVertCY>680894</sizeVertCY>
|
||||||
|
</Rect>
|
||||||
|
</Wnd2>
|
||||||
|
</Sizes>
|
||||||
|
</Row0>
|
||||||
|
</Left>
|
||||||
|
<Right>
|
||||||
|
<Row0>
|
||||||
|
<Sizes />
|
||||||
|
</Row0>
|
||||||
|
</Right>
|
||||||
|
<Bottom>
|
||||||
|
<Row0>
|
||||||
|
<Sizes>
|
||||||
|
<Wnd3>
|
||||||
|
<Rect>
|
||||||
|
<Top>-2</Top>
|
||||||
|
<Left>-2</Left>
|
||||||
|
<Bottom>272</Bottom>
|
||||||
|
<Right>1682</Right>
|
||||||
|
<x>-2</x>
|
||||||
|
<y>-2</y>
|
||||||
|
<xscreen>1684</xscreen>
|
||||||
|
<yscreen>274</yscreen>
|
||||||
|
<sizeHorzCX>1002381</sizeHorzCX>
|
||||||
|
<sizeHorzCY>278455</sizeHorzCY>
|
||||||
|
<sizeVertCX>113095</sizeVertCX>
|
||||||
|
<sizeVertCY>172764</sizeVertCY>
|
||||||
|
</Rect>
|
||||||
|
</Wnd3>
|
||||||
|
</Sizes>
|
||||||
|
</Row0>
|
||||||
|
</Bottom>
|
||||||
|
<Float>
|
||||||
|
<Sizes />
|
||||||
|
</Float>
|
||||||
|
</Positions>
|
||||||
</Desktop>
|
</Desktop>
|
||||||
|
<WindowStorage>
|
||||||
|
<ChildIdMap>
|
||||||
|
<TB_CMSISPACK>34048</TB_CMSISPACK>
|
||||||
|
<TB_MAIN>34049</TB_MAIN>
|
||||||
|
<WIN_BREAKPOINTS>34050</WIN_BREAKPOINTS>
|
||||||
|
<WIN_BUILD>34051</WIN_BUILD>
|
||||||
|
<WIN_CALL_GRAPH>34052</WIN_CALL_GRAPH>
|
||||||
|
<WIN_CMSISPACK_AGENT_LOG>34053</WIN_CMSISPACK_AGENT_LOG>
|
||||||
|
<WIN_CUSTOM_SFR>34054</WIN_CUSTOM_SFR>
|
||||||
|
<WIN_C_STAT>34055</WIN_C_STAT>
|
||||||
|
<WIN_DEBUG_LOG>34056</WIN_DEBUG_LOG>
|
||||||
|
<WIN_FIND_ALL_DECLARATIONS>34057</WIN_FIND_ALL_DECLARATIONS>
|
||||||
|
<WIN_FIND_ALL_REFERENCES>34058</WIN_FIND_ALL_REFERENCES>
|
||||||
|
<WIN_FIND_IN_FILES>34059</WIN_FIND_IN_FILES>
|
||||||
|
<WIN_SELECT_AMBIGUOUS_DEFINITIONS>34060</WIN_SELECT_AMBIGUOUS_DEFINITIONS>
|
||||||
|
<WIN_SOURCE_BROWSER>34061</WIN_SOURCE_BROWSER>
|
||||||
|
<WIN_TOOL_OUTPUT>34062</WIN_TOOL_OUTPUT>
|
||||||
|
<WIN_WORKSPACE>34063</WIN_WORKSPACE>
|
||||||
|
</ChildIdMap>
|
||||||
|
<Desktop>
|
||||||
|
<IarPane-34048>
|
||||||
|
<ToolBarCmdIds>
|
||||||
|
<item>34000</item>
|
||||||
|
<item>34001</item>
|
||||||
|
<item>0</item>
|
||||||
|
</ToolBarCmdIds>
|
||||||
|
</IarPane-34048>
|
||||||
|
<IarPane-34049>
|
||||||
|
<ToolBarCmdIds>
|
||||||
|
<item>57600</item>
|
||||||
|
<item>57601</item>
|
||||||
|
<item>57603</item>
|
||||||
|
<item>33024</item>
|
||||||
|
<item>0</item>
|
||||||
|
<item>57607</item>
|
||||||
|
<item>0</item>
|
||||||
|
<item>57635</item>
|
||||||
|
<item>57634</item>
|
||||||
|
<item>57637</item>
|
||||||
|
<item>0</item>
|
||||||
|
<item>57643</item>
|
||||||
|
<item>57644</item>
|
||||||
|
<item>0</item>
|
||||||
|
<item>33090</item>
|
||||||
|
<item>33057</item>
|
||||||
|
<item>57636</item>
|
||||||
|
<item>57640</item>
|
||||||
|
<item>57641</item>
|
||||||
|
<item>33026</item>
|
||||||
|
<item>33065</item>
|
||||||
|
<item>33063</item>
|
||||||
|
<item>33064</item>
|
||||||
|
<item>33053</item>
|
||||||
|
<item>33054</item>
|
||||||
|
<item>0</item>
|
||||||
|
<item>33035</item>
|
||||||
|
<item>33036</item>
|
||||||
|
<item>34399</item>
|
||||||
|
<item>0</item>
|
||||||
|
<item>33038</item>
|
||||||
|
<item>33039</item>
|
||||||
|
<item>0</item>
|
||||||
|
</ToolBarCmdIds>
|
||||||
|
</IarPane-34049>
|
||||||
|
<IarPane-34056>
|
||||||
|
<ColumnWidth0>21</ColumnWidth0>
|
||||||
|
<ColumnWidth1>1862</ColumnWidth1>
|
||||||
|
<FilterLevel>2</FilterLevel>
|
||||||
|
<LiveFile></LiveFile>
|
||||||
|
<LiveLogEnabled>0</LiveLogEnabled>
|
||||||
|
<LiveFilterLevel>-1</LiveFilterLevel>
|
||||||
|
</IarPane-34056>
|
||||||
|
<IarPane-34063>
|
||||||
|
<ColumnWidths>
|
||||||
|
<Column0>208</Column0>
|
||||||
|
<Column1>30</Column1>
|
||||||
|
<Column2>30</Column2>
|
||||||
|
<Column3>30</Column3>
|
||||||
|
</ColumnWidths>
|
||||||
|
<NodeDict>
|
||||||
|
<ExpandedNode>RTOSDemo</ExpandedNode>
|
||||||
|
</NodeDict>
|
||||||
|
</IarPane-34063>
|
||||||
|
<ControlBarVersion>
|
||||||
|
<Major>14</Major>
|
||||||
|
<Minor>11</Minor>
|
||||||
|
</ControlBarVersion>
|
||||||
|
<MFCToolBarParameters>
|
||||||
|
<Tooltips>1</Tooltips>
|
||||||
|
<ShortcutKeys>1</ShortcutKeys>
|
||||||
|
<LargeIcons>0</LargeIcons>
|
||||||
|
<MenuAnimation>0</MenuAnimation>
|
||||||
|
<RecentlyUsedMenus>1</RecentlyUsedMenus>
|
||||||
|
<MenuShadows>1</MenuShadows>
|
||||||
|
<ShowAllMenusAfterDelay>1</ShowAllMenusAfterDelay>
|
||||||
|
<CommandsUsage>0100000001000D81000001000000</CommandsUsage>
|
||||||
|
</MFCToolBarParameters>
|
||||||
|
<CommandManager>
|
||||||
|
<CommandsWithoutImages>09000D8400000F84000008840000FFFFFFFF54840000328100001C81000009840000D4840000</CommandsWithoutImages>
|
||||||
|
<MenuUserImages>04000E8400005100000030840000530000000B810000200000000D81000022000000</MenuUserImages>
|
||||||
|
</CommandManager>
|
||||||
|
<Pane-59393>
|
||||||
|
<ID>0</ID>
|
||||||
|
<RectRecentFloat>0A0000000A0000006E0000006E000000</RectRecentFloat>
|
||||||
|
<RectRecentDocked>00000000DC03000080070000F5030000</RectRecentDocked>
|
||||||
|
<RecentFrameAlignment>4096</RecentFrameAlignment>
|
||||||
|
<RecentRowIndex>0</RecentRowIndex>
|
||||||
|
<IsFloating>0</IsFloating>
|
||||||
|
<MRUWidth>32767</MRUWidth>
|
||||||
|
<PinState>0</PinState>
|
||||||
|
</Pane-59393>
|
||||||
|
<BasePane-59393>
|
||||||
|
<IsVisible>1</IsVisible>
|
||||||
|
</BasePane-59393>
|
||||||
|
<Pane-34050>
|
||||||
|
<ID>34050</ID>
|
||||||
|
<RectRecentFloat>000000001D00000036010000F8000000</RectRecentFloat>
|
||||||
|
<RectRecentDocked>000000000000000036010000DB000000</RectRecentDocked>
|
||||||
|
<RecentFrameAlignment>32768</RecentFrameAlignment>
|
||||||
|
<RecentRowIndex>0</RecentRowIndex>
|
||||||
|
<IsFloating>0</IsFloating>
|
||||||
|
<MRUWidth>32767</MRUWidth>
|
||||||
|
<PinState>0</PinState>
|
||||||
|
</Pane-34050>
|
||||||
|
<BasePane-34050>
|
||||||
|
<IsVisible>0</IsVisible>
|
||||||
|
</BasePane-34050>
|
||||||
|
<IarPane-34050 />
|
||||||
|
<Pane--1>
|
||||||
|
<ID>4294967295</ID>
|
||||||
|
<RectRecentFloat>0000000056000000180100001A030000</RectRecentFloat>
|
||||||
|
<RectRecentDocked>000000003900000018010000FD020000</RectRecentDocked>
|
||||||
|
<RecentFrameAlignment>4096</RecentFrameAlignment>
|
||||||
|
<RecentRowIndex>0</RecentRowIndex>
|
||||||
|
<IsFloating>0</IsFloating>
|
||||||
|
<MRUWidth>32767</MRUWidth>
|
||||||
|
<PinState>0</PinState>
|
||||||
|
</Pane--1>
|
||||||
|
<BasePane--1>
|
||||||
|
<IsVisible>1</IsVisible>
|
||||||
|
</BasePane--1>
|
||||||
|
<Pane-34051>
|
||||||
|
<ID>34051</ID>
|
||||||
|
<RectRecentFloat>000000001D00000036010000F8000000</RectRecentFloat>
|
||||||
|
<RectRecentDocked>04000000220300007C070000BC030000</RectRecentDocked>
|
||||||
|
<RecentFrameAlignment>32768</RecentFrameAlignment>
|
||||||
|
<RecentRowIndex>0</RecentRowIndex>
|
||||||
|
<IsFloating>0</IsFloating>
|
||||||
|
<MRUWidth>32767</MRUWidth>
|
||||||
|
<PinState>0</PinState>
|
||||||
|
</Pane-34051>
|
||||||
|
<BasePane-34051>
|
||||||
|
<IsVisible>1</IsVisible>
|
||||||
|
</BasePane-34051>
|
||||||
|
<IarPane-34051>
|
||||||
|
<ColumnWidth0>21</ColumnWidth0>
|
||||||
|
<ColumnWidth1>1399</ColumnWidth1>
|
||||||
|
<ColumnWidth2>373</ColumnWidth2>
|
||||||
|
<ColumnWidth3>93</ColumnWidth3>
|
||||||
|
<FilterLevel>2</FilterLevel>
|
||||||
|
<LiveFile>C:\Users\ribarry\Dev\FreeRTOS\WorkingCopy\FreeRTOS\Demo\CORTEX_A5_SAMA5D3x_Xplained_IAR\BuildLog.log</LiveFile>
|
||||||
|
<LiveLogEnabled>0</LiveLogEnabled>
|
||||||
|
<LiveFilterLevel>-1</LiveFilterLevel>
|
||||||
|
</IarPane-34051>
|
||||||
|
<Pane-34053>
|
||||||
|
<ID>34053</ID>
|
||||||
|
<RectRecentFloat>000000001D00000036010000F8000000</RectRecentFloat>
|
||||||
|
<RectRecentDocked>04000000220300007C070000BC030000</RectRecentDocked>
|
||||||
|
<RecentFrameAlignment>4096</RecentFrameAlignment>
|
||||||
|
<RecentRowIndex>0</RecentRowIndex>
|
||||||
|
<IsFloating>0</IsFloating>
|
||||||
|
<MRUWidth>32767</MRUWidth>
|
||||||
|
<PinState>0</PinState>
|
||||||
|
</Pane-34053>
|
||||||
|
<BasePane-34053>
|
||||||
|
<IsVisible>0</IsVisible>
|
||||||
|
</BasePane-34053>
|
||||||
|
<IarPane-34053 />
|
||||||
|
<Pane-34056>
|
||||||
|
<ID>34056</ID>
|
||||||
|
<RectRecentFloat>000000001D00000036010000F8000000</RectRecentFloat>
|
||||||
|
<RectRecentDocked>04000000220300007C070000BC030000</RectRecentDocked>
|
||||||
|
<RecentFrameAlignment>4096</RecentFrameAlignment>
|
||||||
|
<RecentRowIndex>0</RecentRowIndex>
|
||||||
|
<IsFloating>0</IsFloating>
|
||||||
|
<MRUWidth>32767</MRUWidth>
|
||||||
|
<PinState>0</PinState>
|
||||||
|
</Pane-34056>
|
||||||
|
<BasePane-34056>
|
||||||
|
<IsVisible>1</IsVisible>
|
||||||
|
</BasePane-34056>
|
||||||
|
<Pane-34057>
|
||||||
|
<ID>34057</ID>
|
||||||
|
<RectRecentFloat>000000001D00000036010000F8000000</RectRecentFloat>
|
||||||
|
<RectRecentDocked>04000000220300007C070000BC030000</RectRecentDocked>
|
||||||
|
<RecentFrameAlignment>4096</RecentFrameAlignment>
|
||||||
|
<RecentRowIndex>0</RecentRowIndex>
|
||||||
|
<IsFloating>0</IsFloating>
|
||||||
|
<MRUWidth>32767</MRUWidth>
|
||||||
|
<PinState>0</PinState>
|
||||||
|
</Pane-34057>
|
||||||
|
<BasePane-34057>
|
||||||
|
<IsVisible>0</IsVisible>
|
||||||
|
</BasePane-34057>
|
||||||
|
<IarPane-34057 />
|
||||||
|
<Pane-34058>
|
||||||
|
<ID>34058</ID>
|
||||||
|
<RectRecentFloat>000000001D00000036010000F8000000</RectRecentFloat>
|
||||||
|
<RectRecentDocked>04000000220300007C070000BC030000</RectRecentDocked>
|
||||||
|
<RecentFrameAlignment>4096</RecentFrameAlignment>
|
||||||
|
<RecentRowIndex>0</RecentRowIndex>
|
||||||
|
<IsFloating>0</IsFloating>
|
||||||
|
<MRUWidth>32767</MRUWidth>
|
||||||
|
<PinState>0</PinState>
|
||||||
|
</Pane-34058>
|
||||||
|
<BasePane-34058>
|
||||||
|
<IsVisible>0</IsVisible>
|
||||||
|
</BasePane-34058>
|
||||||
|
<IarPane-34058 />
|
||||||
|
<Pane-34059>
|
||||||
|
<ID>34059</ID>
|
||||||
|
<RectRecentFloat>000000001D00000036010000F8000000</RectRecentFloat>
|
||||||
|
<RectRecentDocked>04000000220300007C070000BC030000</RectRecentDocked>
|
||||||
|
<RecentFrameAlignment>4096</RecentFrameAlignment>
|
||||||
|
<RecentRowIndex>0</RecentRowIndex>
|
||||||
|
<IsFloating>0</IsFloating>
|
||||||
|
<MRUWidth>32767</MRUWidth>
|
||||||
|
<PinState>0</PinState>
|
||||||
|
</Pane-34059>
|
||||||
|
<BasePane-34059>
|
||||||
|
<IsVisible>0</IsVisible>
|
||||||
|
</BasePane-34059>
|
||||||
|
<IarPane-34059 />
|
||||||
|
<Pane-34060>
|
||||||
|
<ID>34060</ID>
|
||||||
|
<RectRecentFloat>000000001D00000036010000F8000000</RectRecentFloat>
|
||||||
|
<RectRecentDocked>04000000220300007C070000BC030000</RectRecentDocked>
|
||||||
|
<RecentFrameAlignment>4096</RecentFrameAlignment>
|
||||||
|
<RecentRowIndex>0</RecentRowIndex>
|
||||||
|
<IsFloating>0</IsFloating>
|
||||||
|
<MRUWidth>32767</MRUWidth>
|
||||||
|
<PinState>0</PinState>
|
||||||
|
</Pane-34060>
|
||||||
|
<BasePane-34060>
|
||||||
|
<IsVisible>0</IsVisible>
|
||||||
|
</BasePane-34060>
|
||||||
|
<IarPane-34060 />
|
||||||
|
<Pane-34062>
|
||||||
|
<ID>34062</ID>
|
||||||
|
<RectRecentFloat>000000001D00000036010000F8000000</RectRecentFloat>
|
||||||
|
<RectRecentDocked>04000000220300007C070000BC030000</RectRecentDocked>
|
||||||
|
<RecentFrameAlignment>4096</RecentFrameAlignment>
|
||||||
|
<RecentRowIndex>0</RecentRowIndex>
|
||||||
|
<IsFloating>0</IsFloating>
|
||||||
|
<MRUWidth>32767</MRUWidth>
|
||||||
|
<PinState>0</PinState>
|
||||||
|
</Pane-34062>
|
||||||
|
<BasePane-34062>
|
||||||
|
<IsVisible>0</IsVisible>
|
||||||
|
</BasePane-34062>
|
||||||
|
<IarPane-34062 />
|
||||||
|
<Pane-34052>
|
||||||
|
<ID>34052</ID>
|
||||||
|
<RectRecentFloat>000000001D000000AD020000D0000000</RectRecentFloat>
|
||||||
|
<RectRecentDocked>0000000000000000AD020000B3000000</RectRecentDocked>
|
||||||
|
<RecentFrameAlignment>32768</RecentFrameAlignment>
|
||||||
|
<RecentRowIndex>0</RecentRowIndex>
|
||||||
|
<IsFloating>0</IsFloating>
|
||||||
|
<MRUWidth>32767</MRUWidth>
|
||||||
|
<PinState>0</PinState>
|
||||||
|
</Pane-34052>
|
||||||
|
<BasePane-34052>
|
||||||
|
<IsVisible>0</IsVisible>
|
||||||
|
</BasePane-34052>
|
||||||
|
<IarPane-34052 />
|
||||||
|
<Pane-34054>
|
||||||
|
<ID>34054</ID>
|
||||||
|
<RectRecentFloat>000000001D00000036010000F8000000</RectRecentFloat>
|
||||||
|
<RectRecentDocked>000000000000000036010000DB000000</RectRecentDocked>
|
||||||
|
<RecentFrameAlignment>32768</RecentFrameAlignment>
|
||||||
|
<RecentRowIndex>0</RecentRowIndex>
|
||||||
|
<IsFloating>0</IsFloating>
|
||||||
|
<MRUWidth>32767</MRUWidth>
|
||||||
|
<PinState>0</PinState>
|
||||||
|
</Pane-34054>
|
||||||
|
<BasePane-34054>
|
||||||
|
<IsVisible>0</IsVisible>
|
||||||
|
</BasePane-34054>
|
||||||
|
<IarPane-34054 />
|
||||||
|
<Pane-34055>
|
||||||
|
<ID>34055</ID>
|
||||||
|
<RectRecentFloat>000000001D00000036010000F8000000</RectRecentFloat>
|
||||||
|
<RectRecentDocked>000000000000000036010000DB000000</RectRecentDocked>
|
||||||
|
<RecentFrameAlignment>32768</RecentFrameAlignment>
|
||||||
|
<RecentRowIndex>0</RecentRowIndex>
|
||||||
|
<IsFloating>0</IsFloating>
|
||||||
|
<MRUWidth>32767</MRUWidth>
|
||||||
|
<PinState>0</PinState>
|
||||||
|
</Pane-34055>
|
||||||
|
<BasePane-34055>
|
||||||
|
<IsVisible>0</IsVisible>
|
||||||
|
</BasePane-34055>
|
||||||
|
<IarPane-34055 />
|
||||||
|
<Pane-34061>
|
||||||
|
<ID>34061</ID>
|
||||||
|
<RectRecentFloat>000000001D00000018010000D4010000</RectRecentFloat>
|
||||||
|
<RectRecentDocked>040000005A00000014010000DD020000</RectRecentDocked>
|
||||||
|
<RecentFrameAlignment>4096</RecentFrameAlignment>
|
||||||
|
<RecentRowIndex>0</RecentRowIndex>
|
||||||
|
<IsFloating>0</IsFloating>
|
||||||
|
<MRUWidth>32767</MRUWidth>
|
||||||
|
<PinState>0</PinState>
|
||||||
|
</Pane-34061>
|
||||||
|
<BasePane-34061>
|
||||||
|
<IsVisible>0</IsVisible>
|
||||||
|
</BasePane-34061>
|
||||||
|
<IarPane-34061>
|
||||||
|
<TypeFilter>2147483647</TypeFilter>
|
||||||
|
<FileFilter>1</FileFilter>
|
||||||
|
</IarPane-34061>
|
||||||
|
<Pane-34063>
|
||||||
|
<ID>34063</ID>
|
||||||
|
<RectRecentFloat>000000001D00000018010000D4010000</RectRecentFloat>
|
||||||
|
<RectRecentDocked>000000005600000018010000FD020000</RectRecentDocked>
|
||||||
|
<RecentFrameAlignment>4096</RecentFrameAlignment>
|
||||||
|
<RecentRowIndex>0</RecentRowIndex>
|
||||||
|
<IsFloating>0</IsFloating>
|
||||||
|
<MRUWidth>32767</MRUWidth>
|
||||||
|
<PinState>0</PinState>
|
||||||
|
</Pane-34063>
|
||||||
|
<BasePane-34063>
|
||||||
|
<IsVisible>1</IsVisible>
|
||||||
|
</BasePane-34063>
|
||||||
|
<DockingManager-256>
|
||||||
|
<DockingPaneAndPaneDividers>000000000C000000000000000010000001000000FFFFFFFFFFFFFFFF18010000390000001C010000FD020000010000000200001004000000010000000000000000000000FFFFFFFF020000000D8500000F850000FFFF02000B004354616262656450616E6500100000010000000000000056000000180100001A030000000000003900000018010000FD020000000000004010005602000000FFFEFF1C53006F0075007200630065002000420072006F00770073006500720020002D0020004E006F007400200065006E00610062006C0065006400000000000D85000001000000FFFFFFFFFFFFFFFFFFFEFF0957006F0072006B0073007000610063006500010000000F85000001000000FFFFFFFFFFFFFFFF01000000000000000000000000000000000000000000000001000000FFFFFFFF0D85000001000000FFFFFFFF0D850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000078500000000000000000000000000000000000001000000078500000100000007850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000068500000000000000000000000000000000000001000000068500000100000006850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000048500000000000000000000000000000000000001000000048500000100000004850000000000000080000001000000FFFFFFFFFFFFFFFF00000000FD0200008007000001030000010000000100001004000000010000000000000000000000FFFFFFFF08000000038500000585000008850000098500000A8500000B8500000C8500000E85000001800080000001000000000000001E03000080070000F9030000000000000103000080070000DC030000000000004080005608000000FFFEFF054200750069006C006400010000000385000001000000FFFFFFFFFFFFFFFFFFFEFF0E43004D005300490053002D005000610063006B0020004C006F006700000000000585000001000000FFFFFFFFFFFFFFFFFFFEFF094400650062007500670020004C006F006700010000000885000001000000FFFFFFFFFFFFFFFFFFFEFF0C4400650063006C00610072006100740069006F006E007300000000000985000001000000FFFFFFFFFFFFFFFFFFFEFF0A5200650066006500720065006E00630065007300000000000A85000001000000FFFFFFFFFFFFFFFFFFFEFF0D460069006E006400200069006E002000460069006C0065007300000000000B85000001000000FFFFFFFFFFFFFFFFFFFEFF1541006D0062006900670075006F0075007300200044006500660069006E006900740069006F006E007300000000000C85000001000000FFFFFFFFFFFFFFFFFFFEFF0B54006F006F006C0020004F0075007400700075007400000000000E85000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFF0385000001000000FFFFFFFF03850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000028500000000000000000000000000000000000001000000028500000100000002850000000000000000000000000000</DockingPaneAndPaneDividers>
|
||||||
|
</DockingManager-256>
|
||||||
|
<MFCToolBar-34048>
|
||||||
|
<Name>CMSIS-Pack</Name>
|
||||||
|
<Buttons>00200000010000000200FFFF01001100434D4643546F6F6C426172427574746F6ED0840000000004000C000000FFFEFF0000000000000000000000000001000000010000000180D1840000000000000D000000FFFEFF00000000000000000000000000010000000100000000000000FFFEFF0A43004D005300490053002D005000610063006B002F000000</Buttons>
|
||||||
|
</MFCToolBar-34048>
|
||||||
|
<Pane-34048>
|
||||||
|
<ID>34048</ID>
|
||||||
|
<RectRecentFloat>0A0000000A0000006E0000006E000000</RectRecentFloat>
|
||||||
|
<RectRecentDocked>0003000000000000470300001C000000</RectRecentDocked>
|
||||||
|
<RecentFrameAlignment>8192</RecentFrameAlignment>
|
||||||
|
<RecentRowIndex>0</RecentRowIndex>
|
||||||
|
<IsFloating>0</IsFloating>
|
||||||
|
<MRUWidth>47</MRUWidth>
|
||||||
|
<PinState>0</PinState>
|
||||||
|
</Pane-34048>
|
||||||
|
<BasePane-34048>
|
||||||
|
<IsVisible>1</IsVisible>
|
||||||
|
</BasePane-34048>
|
||||||
|
<MFCToolBar-34049>
|
||||||
|
<Name>Main</Name>
|
||||||
|
<Buttons>00200000010000002000FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000032000000FFFEFF000000000000000000000000000100000001000000018001E100000000000033000000FFFEFF000000000000000000000000000100000001000000018003E100000000040035000000FFFEFF0000000000000000000000000001000000010000000180008100000000000016000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000018007E100000000040038000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000018023E10000000004003A000000FFFEFF000000000000000000000000000100000001000000018022E100000000040039000000FFFEFF000000000000000000000000000100000001000000018025E10000000004003C000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001802BE10000000004003F000000FFFEFF00000000000000000000000000010000000100000001802CE100000000040040000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6E4281000000000400FFFFFFFFFFFEFF0001000000000000000100000000000000010000007800000002002050FFFFFFFFFFFEFF00960000000000000000000180218100000000040029000000FFFEFF000000000000000000000000000100000001000000018024E10000000004003B000000FFFEFF000000000000000000000000000100000001000000018028E10000000004003D000000FFFEFF000000000000000000000000000100000001000000018029E10000000004003E000000FFFEFF0000000000000000000000000001000000010000000180028100000000040018000000FFFEFF000000000000000000000000000100000001000000018029810000000004002D000000FFFEFF000000000000000000000000000100000001000000018027810000000004002B000000FFFEFF000000000000000000000000000100000001000000018028810000000004002C000000FFFEFF00000000000000000000000000010000000100000001801D8100000000040025000000FFFEFF00000000000000000000000000010000000100000001801E8100000000040026000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001800B810000000004001C000000FFFEFF00000000000000000000000000010000000100000001800C810000000000001D000000FFFEFF00000000000000000000000000010000000100000001805F8600000000000031000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001800E810000000000001F000000FFFEFF00000000000000000000000000010000000100000001800F8100000000000020000000FFFEFF00000000000000000000000000010000000100000000000000FFFEFF044D00610069006E00E8020000</Buttons>
|
||||||
|
</MFCToolBar-34049>
|
||||||
|
<Pane-34049>
|
||||||
|
<ID>34049</ID>
|
||||||
|
<RectRecentFloat>0A0000000A0000006E0000006E000000</RectRecentFloat>
|
||||||
|
<RectRecentDocked>0000000000000000000300001D000000</RectRecentDocked>
|
||||||
|
<RecentFrameAlignment>8192</RecentFrameAlignment>
|
||||||
|
<RecentRowIndex>0</RecentRowIndex>
|
||||||
|
<IsFloating>0</IsFloating>
|
||||||
|
<MRUWidth>744</MRUWidth>
|
||||||
|
<PinState>0</PinState>
|
||||||
|
</Pane-34049>
|
||||||
|
<BasePane-34049>
|
||||||
|
<IsVisible>1</IsVisible>
|
||||||
|
</BasePane-34049>
|
||||||
|
</Desktop>
|
||||||
|
<MDIWindows>
|
||||||
|
<MDIClientArea-0>
|
||||||
|
<MDITabsState>01000000030000000100000000000000000000000100000001000000FFFFFFFF00000000010000000100000000000000280000002800000000000000</MDITabsState>
|
||||||
|
</MDIClientArea-0>
|
||||||
|
</MDIWindows>
|
||||||
|
</WindowStorage>
|
||||||
</Workspace>
|
</Workspace>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
<name>General</name>
|
<name>General</name>
|
||||||
<archiveVersion>3</archiveVersion>
|
<archiveVersion>3</archiveVersion>
|
||||||
<data>
|
<data>
|
||||||
<version>29</version>
|
<version>30</version>
|
||||||
<wantNonLocal>1</wantNonLocal>
|
<wantNonLocal>1</wantNonLocal>
|
||||||
<debug>1</debug>
|
<debug>1</debug>
|
||||||
<option>
|
<option>
|
||||||
|
@ -200,6 +200,10 @@
|
||||||
<name>DSPExtension</name>
|
<name>DSPExtension</name>
|
||||||
<state>0</state>
|
<state>0</state>
|
||||||
</option>
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>TrustZone</name>
|
||||||
|
<state>0</state>
|
||||||
|
</option>
|
||||||
</data>
|
</data>
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
|
@ -1038,7 +1042,7 @@
|
||||||
<name>General</name>
|
<name>General</name>
|
||||||
<archiveVersion>3</archiveVersion>
|
<archiveVersion>3</archiveVersion>
|
||||||
<data>
|
<data>
|
||||||
<version>29</version>
|
<version>30</version>
|
||||||
<wantNonLocal>1</wantNonLocal>
|
<wantNonLocal>1</wantNonLocal>
|
||||||
<debug>1</debug>
|
<debug>1</debug>
|
||||||
<option>
|
<option>
|
||||||
|
@ -1059,11 +1063,11 @@
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>Input description</name>
|
<name>Input description</name>
|
||||||
<state>No specifier n, no float nor long long, no scan set, no assignment suppressing.</state>
|
<state>No specifier n, no float nor long long, no scan set, no assignment suppressing, without multibyte support.</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>Output description</name>
|
<name>Output description</name>
|
||||||
<state>No specifier a, A, no specifier n, no float nor long long.</state>
|
<state>No specifier a, A, no specifier n, no float nor long long, without multibyte support.</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>GOutputBinary</name>
|
<name>GOutputBinary</name>
|
||||||
|
@ -1093,7 +1097,7 @@
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>OGLastSavedByProductVersion</name>
|
<name>OGLastSavedByProductVersion</name>
|
||||||
<state>8.20.1.14181</state>
|
<state>8.22.1.15696</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>GeneralEnableMisra</name>
|
<name>GeneralEnableMisra</name>
|
||||||
|
@ -1144,7 +1148,7 @@
|
||||||
<option>
|
<option>
|
||||||
<name>GBECoreSlave</name>
|
<name>GBECoreSlave</name>
|
||||||
<version>26</version>
|
<version>26</version>
|
||||||
<state>51</state>
|
<state>50</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>OGUseCmsis</name>
|
<name>OGUseCmsis</name>
|
||||||
|
@ -1227,6 +1231,10 @@
|
||||||
<name>DSPExtension</name>
|
<name>DSPExtension</name>
|
||||||
<state>0</state>
|
<state>0</state>
|
||||||
</option>
|
</option>
|
||||||
|
<option>
|
||||||
|
<name>TrustZone</name>
|
||||||
|
<state>1</state>
|
||||||
|
</option>
|
||||||
</data>
|
</data>
|
||||||
</settings>
|
</settings>
|
||||||
<settings>
|
<settings>
|
||||||
|
@ -1644,6 +1652,7 @@
|
||||||
<name>AUserIncludes</name>
|
<name>AUserIncludes</name>
|
||||||
<state>$PROJ_DIR$\..\..\..\libraries</state>
|
<state>$PROJ_DIR$\..\..\..\libraries</state>
|
||||||
<state>$PROJ_DIR$/.</state>
|
<state>$PROJ_DIR$/.</state>
|
||||||
|
<state>$PROJ_DIR$\..\..\Source\portable\IAR\ARM_CA5_No_GIC</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>AExtraOptionsCheckV2</name>
|
<name>AExtraOptionsCheckV2</name>
|
||||||
|
|
|
@ -287,7 +287,7 @@
|
||||||
<ColumnWidth0>21</ColumnWidth0>
|
<ColumnWidth0>21</ColumnWidth0>
|
||||||
<ColumnWidth1>1862</ColumnWidth1>
|
<ColumnWidth1>1862</ColumnWidth1>
|
||||||
<FilterLevel>2</FilterLevel>
|
<FilterLevel>2</FilterLevel>
|
||||||
<LiveFile></LiveFile>
|
<LiveFile />
|
||||||
<LiveLogEnabled>0</LiveLogEnabled>
|
<LiveLogEnabled>0</LiveLogEnabled>
|
||||||
<LiveFilterLevel>-1</LiveFilterLevel>
|
<LiveFilterLevel>-1</LiveFilterLevel>
|
||||||
</IarPane-34056>
|
</IarPane-34056>
|
||||||
|
@ -304,7 +304,7 @@
|
||||||
</IarPane-34063>
|
</IarPane-34063>
|
||||||
<ControlBarVersion>
|
<ControlBarVersion>
|
||||||
<Major>14</Major>
|
<Major>14</Major>
|
||||||
<Minor>10</Minor>
|
<Minor>11</Minor>
|
||||||
</ControlBarVersion>
|
</ControlBarVersion>
|
||||||
<MFCToolBarParameters>
|
<MFCToolBarParameters>
|
||||||
<Tooltips>1</Tooltips>
|
<Tooltips>1</Tooltips>
|
||||||
|
@ -314,11 +314,11 @@
|
||||||
<RecentlyUsedMenus>1</RecentlyUsedMenus>
|
<RecentlyUsedMenus>1</RecentlyUsedMenus>
|
||||||
<MenuShadows>1</MenuShadows>
|
<MenuShadows>1</MenuShadows>
|
||||||
<ShowAllMenusAfterDelay>1</ShowAllMenusAfterDelay>
|
<ShowAllMenusAfterDelay>1</ShowAllMenusAfterDelay>
|
||||||
<CommandsUsage>000000000000</CommandsUsage>
|
<CommandsUsage>0100000001000D81000001000000</CommandsUsage>
|
||||||
</MFCToolBarParameters>
|
</MFCToolBarParameters>
|
||||||
<CommandManager>
|
<CommandManager>
|
||||||
<CommandsWithoutImages>060020F1000010F0000000F0000020F0000030F0000060F00000</CommandsWithoutImages>
|
<CommandsWithoutImages>110020F1000010F0000000F0000020F0000030F0000060F000000D8400000F84000008840000FFFFFFFF54840000328100001C81000009840000D48400000E84000030840000</CommandsWithoutImages>
|
||||||
<MenuUserImages>0000</MenuUserImages>
|
<MenuUserImages>02000B8100001C0000000D8100001E000000</MenuUserImages>
|
||||||
</CommandManager>
|
</CommandManager>
|
||||||
<Pane-59393>
|
<Pane-59393>
|
||||||
<ID>0</ID>
|
<ID>0</ID>
|
||||||
|
@ -349,8 +349,8 @@
|
||||||
<IarPane-34050 />
|
<IarPane-34050 />
|
||||||
<Pane--1>
|
<Pane--1>
|
||||||
<ID>4294967295</ID>
|
<ID>4294967295</ID>
|
||||||
<RectRecentFloat>000000001D00000018010000D4010000</RectRecentFloat>
|
<RectRecentFloat>0000000073000000180100001A030000</RectRecentFloat>
|
||||||
<RectRecentDocked>000000003900000018010000FD020000</RectRecentDocked>
|
<RectRecentDocked>000000005600000018010000FD020000</RectRecentDocked>
|
||||||
<RecentFrameAlignment>4096</RecentFrameAlignment>
|
<RecentFrameAlignment>4096</RecentFrameAlignment>
|
||||||
<RecentRowIndex>0</RecentRowIndex>
|
<RecentRowIndex>0</RecentRowIndex>
|
||||||
<IsFloating>0</IsFloating>
|
<IsFloating>0</IsFloating>
|
||||||
|
@ -386,7 +386,7 @@
|
||||||
<Pane-34053>
|
<Pane-34053>
|
||||||
<ID>34053</ID>
|
<ID>34053</ID>
|
||||||
<RectRecentFloat>000000001D00000036010000F8000000</RectRecentFloat>
|
<RectRecentFloat>000000001D00000036010000F8000000</RectRecentFloat>
|
||||||
<RectRecentDocked>000000001E03000080070000DC030000</RectRecentDocked>
|
<RectRecentDocked>04000000220300007C070000BC030000</RectRecentDocked>
|
||||||
<RecentFrameAlignment>4096</RecentFrameAlignment>
|
<RecentFrameAlignment>4096</RecentFrameAlignment>
|
||||||
<RecentRowIndex>0</RecentRowIndex>
|
<RecentRowIndex>0</RecentRowIndex>
|
||||||
<IsFloating>0</IsFloating>
|
<IsFloating>0</IsFloating>
|
||||||
|
@ -525,7 +525,7 @@
|
||||||
<Pane-34061>
|
<Pane-34061>
|
||||||
<ID>34061</ID>
|
<ID>34061</ID>
|
||||||
<RectRecentFloat>000000001D00000018010000D4010000</RectRecentFloat>
|
<RectRecentFloat>000000001D00000018010000D4010000</RectRecentFloat>
|
||||||
<RectRecentDocked>040000005A00000014010000D0010000</RectRecentDocked>
|
<RectRecentDocked>040000007700000014010000DD020000</RectRecentDocked>
|
||||||
<RecentFrameAlignment>4096</RecentFrameAlignment>
|
<RecentFrameAlignment>4096</RecentFrameAlignment>
|
||||||
<RecentRowIndex>0</RecentRowIndex>
|
<RecentRowIndex>0</RecentRowIndex>
|
||||||
<IsFloating>0</IsFloating>
|
<IsFloating>0</IsFloating>
|
||||||
|
@ -535,11 +535,14 @@
|
||||||
<BasePane-34061>
|
<BasePane-34061>
|
||||||
<IsVisible>0</IsVisible>
|
<IsVisible>0</IsVisible>
|
||||||
</BasePane-34061>
|
</BasePane-34061>
|
||||||
<IarPane-34061 />
|
<IarPane-34061>
|
||||||
|
<TypeFilter>2147483647</TypeFilter>
|
||||||
|
<FileFilter>1</FileFilter>
|
||||||
|
</IarPane-34061>
|
||||||
<Pane-34063>
|
<Pane-34063>
|
||||||
<ID>34063</ID>
|
<ID>34063</ID>
|
||||||
<RectRecentFloat>000000001D00000018010000D4010000</RectRecentFloat>
|
<RectRecentFloat>000000001D00000018010000D4010000</RectRecentFloat>
|
||||||
<RectRecentDocked>000000005600000018010000FD020000</RectRecentDocked>
|
<RectRecentDocked>000000007300000018010000FD020000</RectRecentDocked>
|
||||||
<RecentFrameAlignment>4096</RecentFrameAlignment>
|
<RecentFrameAlignment>4096</RecentFrameAlignment>
|
||||||
<RecentRowIndex>0</RecentRowIndex>
|
<RecentRowIndex>0</RecentRowIndex>
|
||||||
<IsFloating>0</IsFloating>
|
<IsFloating>0</IsFloating>
|
||||||
|
@ -550,20 +553,20 @@
|
||||||
<IsVisible>1</IsVisible>
|
<IsVisible>1</IsVisible>
|
||||||
</BasePane-34063>
|
</BasePane-34063>
|
||||||
<DockingManager-256>
|
<DockingManager-256>
|
||||||
<DockingPaneAndPaneDividers>000000000C000000000000000010000001000000FFFFFFFFFFFFFFFF18010000390000001C010000FD020000010000000200001004000000010000000000000000000000FFFFFFFF020000000D8500000F850000FFFF02000B004354616262656450616E650010000001000000000000001D00000018010000D4010000000000003900000018010000FD020000000000004010005602000000FFFEFF0E53006F0075007200630065002000420072006F007700730065007200000000000D85000001000000FFFFFFFFFFFFFFFFFFFEFF0957006F0072006B0073007000610063006500010000000F85000001000000FFFFFFFFFFFFFFFF01000000000000000000000000000000000000000000000001000000FFFFFFFF0D85000001000000FFFFFFFF0D850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100001004000000010000000000000000000000078500000000000000000000000000000000000001000000078500000100000007850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100001004000000010000000000000000000000068500000000000000000000000000000000000001000000068500000100000006850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100001004000000010000000000000000000000048500000000000000000000000000000000000001000000048500000100000004850000000000000080000001000000FFFFFFFFFFFFFFFF00000000FD0200008007000001030000010000000100001004000000010000000000000000000000FFFFFFFF08000000038500000585000008850000098500000A8500000B8500000C8500000E85000001800080000001000000000000001D00000036010000F8000000000000000103000080070000DC030000000000004080005608000000FFFEFF054200750069006C006400010000000385000001000000FFFFFFFFFFFFFFFFFFFEFF0E43004D005300490053002D005000610063006B0020004C006F006700000000000585000001000000FFFFFFFFFFFFFFFFFFFEFF094400650062007500670020004C006F006700010000000885000001000000FFFFFFFFFFFFFFFFFFFEFF0C4400650063006C00610072006100740069006F006E007300000000000985000001000000FFFFFFFFFFFFFFFFFFFEFF0A5200650066006500720065006E00630065007300000000000A85000001000000FFFFFFFFFFFFFFFFFFFEFF0D460069006E006400200069006E002000460069006C0065007300000000000B85000001000000FFFFFFFFFFFFFFFFFFFEFF1541006D0062006900670075006F0075007300200044006500660069006E006900740069006F006E007300000000000C85000001000000FFFFFFFFFFFFFFFFFFFEFF0B54006F006F006C0020004F0075007400700075007400000000000E85000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFF0385000001000000FFFFFFFF03850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100001004000000010000000000000000000000028500000000000000000000000000000000000001000000028500000100000002850000000000000000000000000000</DockingPaneAndPaneDividers>
|
<DockingPaneAndPaneDividers>000000000C000000000000000010000001000000FFFFFFFFFFFFFFFF18010000560000001C010000FD020000010000000200001004000000010000000000000000000000FFFFFFFF020000000D8500000F850000FFFF02000B004354616262656450616E6500100000010000000000000073000000180100001A030000000000005600000018010000FD020000000000004010005602000000FFFEFF1C53006F0075007200630065002000420072006F00770073006500720020002D0020004E006F007400200065006E00610062006C0065006400000000000D85000001000000FFFFFFFFFFFFFFFFFFFEFF0957006F0072006B0073007000610063006500010000000F85000001000000FFFFFFFFFFFFFFFF01000000000000000000000000000000000000000000000001000000FFFFFFFF0D85000001000000FFFFFFFF0D850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000078500000000000000000000000000000000000001000000078500000100000007850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000068500000000000000000000000000000000000001000000068500000100000006850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000048500000000000000000000000000000000000001000000048500000100000004850000000000000080000001000000FFFFFFFFFFFFFFFF00000000FD0200008007000001030000010000000100001004000000010000000000000000000000FFFFFFFF08000000038500000585000008850000098500000A8500000B8500000C8500000E85000001800080000001000000000000001E03000080070000F9030000000000000103000080070000DC030000000000004080005608000000FFFEFF054200750069006C006400010000000385000001000000FFFFFFFFFFFFFFFFFFFEFF0E43004D005300490053002D005000610063006B0020004C006F006700000000000585000001000000FFFFFFFFFFFFFFFFFFFEFF094400650062007500670020004C006F006700010000000885000001000000FFFFFFFFFFFFFFFFFFFEFF0C4400650063006C00610072006100740069006F006E007300000000000985000001000000FFFFFFFFFFFFFFFFFFFEFF0A5200650066006500720065006E00630065007300000000000A85000001000000FFFFFFFFFFFFFFFFFFFEFF0D460069006E006400200069006E002000460069006C0065007300000000000B85000001000000FFFFFFFFFFFFFFFFFFFEFF1541006D0062006900670075006F0075007300200044006500660069006E006900740069006F006E007300000000000C85000001000000FFFFFFFFFFFFFFFFFFFEFF0B54006F006F006C0020004F0075007400700075007400000000000E85000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFF0385000001000000FFFFFFFF03850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000028500000000000000000000000000000000000001000000028500000100000002850000000000000000000000000000</DockingPaneAndPaneDividers>
|
||||||
</DockingManager-256>
|
</DockingManager-256>
|
||||||
<MFCToolBar-34048>
|
<MFCToolBar-34048>
|
||||||
<Name>CMSIS-Pack</Name>
|
<Name>CMSIS-Pack</Name>
|
||||||
<Buttons>00200000010000000200FFFF01001100434D4643546F6F6C426172427574746F6ED0840000000004000C000000FFFEFF0000000000000000000000000001000000010000000180D1840000000000000D000000FFFEFF00000000000000000000000000010000000100000000000000FFFEFF0A43004D005300490053002D005000610063006B00FF7F0000</Buttons>
|
<Buttons>00200000010000000200FFFF01001100434D4643546F6F6C426172427574746F6ED0840000000004000C000000FFFEFF0000000000000000000000000001000000010000000180D1840000000000000D000000FFFEFF00000000000000000000000000010000000100000000000000FFFEFF0A43004D005300490053002D005000610063006B002F000000</Buttons>
|
||||||
</MFCToolBar-34048>
|
</MFCToolBar-34048>
|
||||||
<Pane-34048>
|
<Pane-34048>
|
||||||
<ID>34048</ID>
|
<ID>34048</ID>
|
||||||
<RectRecentFloat>0A0000000A0000006E0000006E000000</RectRecentFloat>
|
<RectRecentFloat>0A0000000A0000006E0000006E000000</RectRecentFloat>
|
||||||
<RectRecentDocked>000300001C0000004703000038000000</RectRecentDocked>
|
<RectRecentDocked>000300001D0000004703000039000000</RectRecentDocked>
|
||||||
<RecentFrameAlignment>8192</RecentFrameAlignment>
|
<RecentFrameAlignment>8192</RecentFrameAlignment>
|
||||||
<RecentRowIndex>1</RecentRowIndex>
|
<RecentRowIndex>1</RecentRowIndex>
|
||||||
<IsFloating>0</IsFloating>
|
<IsFloating>0</IsFloating>
|
||||||
<MRUWidth>32767</MRUWidth>
|
<MRUWidth>47</MRUWidth>
|
||||||
<PinState>0</PinState>
|
<PinState>0</PinState>
|
||||||
</Pane-34048>
|
</Pane-34048>
|
||||||
<BasePane-34048>
|
<BasePane-34048>
|
||||||
|
@ -571,16 +574,16 @@
|
||||||
</BasePane-34048>
|
</BasePane-34048>
|
||||||
<MFCToolBar-34049>
|
<MFCToolBar-34049>
|
||||||
<Name>Main</Name>
|
<Name>Main</Name>
|
||||||
<Buttons>00200000010000002000FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000036000000FFFEFF000000000000000000000000000100000001000000018001E100000000000037000000FFFEFF000000000000000000000000000100000001000000018003E100000000040039000000FFFEFF000000000000000000000000000100000001000000018000810000000000001A000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000018007E10000000004003C000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000018023E10000000004003E000000FFFEFF000000000000000000000000000100000001000000018022E10000000004003D000000FFFEFF000000000000000000000000000100000001000000018025E100000000040040000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001802BE100000000040043000000FFFEFF00000000000000000000000000010000000100000001802CE100000000040044000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6E4281000000000400FFFFFFFFFFFEFF0000000000000000000100000000000000010000007800000002002050FFFFFFFFFFFEFF0096000000000000000000018021810000000004002D000000FFFEFF000000000000000000000000000100000001000000018024E10000000004003F000000FFFEFF000000000000000000000000000100000001000000018028E100000000040041000000FFFEFF000000000000000000000000000100000001000000018029E100000000040042000000FFFEFF000000000000000000000000000100000001000000018002810000000004001C000000FFFEFF0000000000000000000000000001000000010000000180298100000000040031000000FFFEFF000000000000000000000000000100000001000000018027810000000004002F000000FFFEFF0000000000000000000000000001000000010000000180288100000000040030000000FFFEFF00000000000000000000000000010000000100000001801D8100000000040029000000FFFEFF00000000000000000000000000010000000100000001801E810000000004002A000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001800B8100000000040020000000FFFEFF00000000000000000000000000010000000100000001800C8100000000000021000000FFFEFF00000000000000000000000000010000000100000001805F8600000000000035000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001800E8100000000000023000000FFFEFF00000000000000000000000000010000000100000001800F8100000000000024000000FFFEFF00000000000000000000000000010000000100000000000000FFFEFF044D00610069006E00FF7F0000</Buttons>
|
<Buttons>00200000010000002000FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000032000000FFFEFF000000000000000000000000000100000001000000018001E100000000000033000000FFFEFF000000000000000000000000000100000001000000018003E100000000040035000000FFFEFF0000000000000000000000000001000000010000000180008100000000000016000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000018007E100000000040038000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000018023E10000000004003A000000FFFEFF000000000000000000000000000100000001000000018022E100000000040039000000FFFEFF000000000000000000000000000100000001000000018025E10000000004003C000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001802BE10000000004003F000000FFFEFF00000000000000000000000000010000000100000001802CE100000000040040000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6E4281000000000400FFFFFFFFFFFEFF0000000000000000000100000000000000010000007800000002002050FFFFFFFFFFFEFF00960000000000000000000180218100000000040029000000FFFEFF000000000000000000000000000100000001000000018024E10000000004003B000000FFFEFF000000000000000000000000000100000001000000018028E10000000004003D000000FFFEFF000000000000000000000000000100000001000000018029E10000000004003E000000FFFEFF0000000000000000000000000001000000010000000180028100000000040018000000FFFEFF000000000000000000000000000100000001000000018029810000000004002D000000FFFEFF000000000000000000000000000100000001000000018027810000000004002B000000FFFEFF000000000000000000000000000100000001000000018028810000000004002C000000FFFEFF00000000000000000000000000010000000100000001801D8100000000000025000000FFFEFF00000000000000000000000000010000000100000001801E8100000000040026000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001800B810000000004001C000000FFFEFF00000000000000000000000000010000000100000001800C810000000000001D000000FFFEFF00000000000000000000000000010000000100000001805F8600000000000031000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001800E810000000000001F000000FFFEFF00000000000000000000000000010000000100000001800F8100000000000020000000FFFEFF00000000000000000000000000010000000100000000000000FFFEFF044D00610069006E00E8020000</Buttons>
|
||||||
</MFCToolBar-34049>
|
</MFCToolBar-34049>
|
||||||
<Pane-34049>
|
<Pane-34049>
|
||||||
<ID>34049</ID>
|
<ID>34049</ID>
|
||||||
<RectRecentFloat>0A0000000A0000006E0000006E000000</RectRecentFloat>
|
<RectRecentFloat>0A0000000A0000006E0000006E000000</RectRecentFloat>
|
||||||
<RectRecentDocked>000000001C0000000003000039000000</RectRecentDocked>
|
<RectRecentDocked>000000001D000000000300003A000000</RectRecentDocked>
|
||||||
<RecentFrameAlignment>8192</RecentFrameAlignment>
|
<RecentFrameAlignment>8192</RecentFrameAlignment>
|
||||||
<RecentRowIndex>1</RecentRowIndex>
|
<RecentRowIndex>1</RecentRowIndex>
|
||||||
<IsFloating>0</IsFloating>
|
<IsFloating>0</IsFloating>
|
||||||
<MRUWidth>32767</MRUWidth>
|
<MRUWidth>744</MRUWidth>
|
||||||
<PinState>0</PinState>
|
<PinState>0</PinState>
|
||||||
</Pane-34049>
|
</Pane-34049>
|
||||||
<BasePane-34049>
|
<BasePane-34049>
|
||||||
|
@ -589,7 +592,7 @@
|
||||||
</Desktop>
|
</Desktop>
|
||||||
<MDIWindows>
|
<MDIWindows>
|
||||||
<MDIClientArea-0>
|
<MDIClientArea-0>
|
||||||
<MDITabsState>01000000030000000100000000000000000000000100000001000000FFFFFFFF00000000010000000100000000000000280000002800000000000000</MDITabsState>
|
<MDITabsState>01000000030000000100000000000000000000000100000001000000FFFFFFFF00000000010000000100000000000000280000002800000001000000010000000000000001000000FFFEFF302400570053005F0044004900520024005C00410074006D0065006C00460069006C00650073005C006C006900620063006800690070005F00730061006D00610035006400340078005C0063007000310035005C0063007000310035002E00630001000000FFFF010014004966436F6E74656E7453746F72616765496D706CFFFEFF00FFFEFFFF28013C003F0078006D006C002000760065007200730069006F006E003D00220031002E0030002200200065006E0063006F00640069006E0067003D0022005500540046002D00380022003F003E000A003C0052006F006F0074003E000A0020002000200020003C004E0075006D0052006F00770073003E0031003C002F004E0075006D0052006F00770073003E000A0020002000200020003C004E0075006D0043006F006C0073003E0031003C002F004E0075006D0043006F006C0073003E000A0020002000200020003C00580050006F0073003E0030003C002F00580050006F0073003E000A0020002000200020003C00590050006F0073003E0030003C002F00590050006F0073003E000A0020002000200020003C00530065006C00530074006100720074003E0030003C002F00530065006C00530074006100720074003E000A0020002000200020003C00530065006C0045006E0064003E0030003C002F00530065006C0045006E0064003E000A0020002000200020003C00580050006F00730032003E0030003C002F00580050006F00730032003E000A0020002000200020003C00590050006F00730032003E003300300030003C002F00590050006F00730032003E000A0020002000200020003C00530065006C005300740061007200740032003E0038003200380035003C002F00530065006C005300740061007200740032003E000A0020002000200020003C00530065006C0045006E00640032003E0038003200380035003C002F00530065006C0045006E00640032003E000A003C002F0052006F006F0074003E000A00FFFEFF0663007000310035002E00630000000000FFFFFFFFFFFFFFFF0000000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000001000000020000001C01000073000000800700001A030000</MDITabsState>
|
||||||
</MDIClientArea-0>
|
</MDIClientArea-0>
|
||||||
</MDIWindows>
|
</MDIWindows>
|
||||||
</WindowStorage>
|
</WindowStorage>
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<?fileVersion 4.0.0?>
|
<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
|
||||||
|
|
||||||
<cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
|
|
||||||
<storageModule configRelations="2" moduleId="org.eclipse.cdt.core.settings">
|
<storageModule configRelations="2" moduleId="org.eclipse.cdt.core.settings">
|
||||||
<cconfiguration id="com.ti.ccstudio.buildDefinitions.TMS470.Release.553048191.1928533182">
|
<cconfiguration id="com.ti.ccstudio.buildDefinitions.TMS470.Release.553048191.1928533182">
|
||||||
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.ti.ccstudio.buildDefinitions.TMS470.Release.553048191.1928533182" moduleId="org.eclipse.cdt.core.settings" name="RM48 without FPU">
|
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.ti.ccstudio.buildDefinitions.TMS470.Release.553048191.1928533182" moduleId="org.eclipse.cdt.core.settings" name="RM48 without FPU">
|
||||||
|
@ -11,6 +9,7 @@
|
||||||
<extension id="com.ti.ccstudio.errorparser.CoffErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
<extension id="com.ti.ccstudio.errorparser.CoffErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
<extension id="com.ti.ccstudio.errorparser.LinkErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
<extension id="com.ti.ccstudio.errorparser.LinkErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
<extension id="com.ti.ccstudio.errorparser.AsmErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
<extension id="com.ti.ccstudio.errorparser.AsmErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
</extensions>
|
</extensions>
|
||||||
</storageModule>
|
</storageModule>
|
||||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||||
|
@ -21,7 +20,7 @@
|
||||||
<listOptionValue builtIn="false" value="DEVICE_CONFIGURATION_ID=Cortex R.RM48L950"/>
|
<listOptionValue builtIn="false" value="DEVICE_CONFIGURATION_ID=Cortex R.RM48L950"/>
|
||||||
<listOptionValue builtIn="false" value="DEVICE_ENDIANNESS=little"/>
|
<listOptionValue builtIn="false" value="DEVICE_ENDIANNESS=little"/>
|
||||||
<listOptionValue builtIn="false" value="OUTPUT_FORMAT=ELF"/>
|
<listOptionValue builtIn="false" value="OUTPUT_FORMAT=ELF"/>
|
||||||
<listOptionValue builtIn="false" value="CCS_MBS_VERSION=5.1.0.01"/>
|
<listOptionValue builtIn="false" value="CCS_MBS_VERSION=6.1.3"/>
|
||||||
<listOptionValue builtIn="false" value="LINKER_COMMAND_FILE=sys_link.cmd"/>
|
<listOptionValue builtIn="false" value="LINKER_COMMAND_FILE=sys_link.cmd"/>
|
||||||
<listOptionValue builtIn="false" value="RUNTIME_SUPPORT_LIBRARY=rtsv7R4_A_le_eabi.lib"/>
|
<listOptionValue builtIn="false" value="RUNTIME_SUPPORT_LIBRARY=rtsv7R4_A_le_eabi.lib"/>
|
||||||
<listOptionValue builtIn="false" value="OUTPUT_TYPE=executable"/>
|
<listOptionValue builtIn="false" value="OUTPUT_TYPE=executable"/>
|
||||||
|
@ -58,7 +57,7 @@
|
||||||
<inputType id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.compiler.inputType__ASM2_SRCS.1096947129" name="Assembly Sources" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.compiler.inputType__ASM2_SRCS"/>
|
<inputType id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.compiler.inputType__ASM2_SRCS.1096947129" name="Assembly Sources" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.compiler.inputType__ASM2_SRCS"/>
|
||||||
</tool>
|
</tool>
|
||||||
<tool id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exe.linkerRelease.2044031914" name="ARM Linker" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exe.linkerRelease">
|
<tool id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exe.linkerRelease.2044031914" name="ARM Linker" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exe.linkerRelease">
|
||||||
<option id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.OUTPUT_FILE.701787318" name="Specify output file name (--output_file, -o)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.OUTPUT_FILE" value=""${ProjName}.out"" valueType="string"/>
|
<option id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.OUTPUT_FILE.701787318" name="Specify output file name (--output_file, -o)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.OUTPUT_FILE" useByScannerDiscovery="false" value="${ProjName}.out" valueType="string"/>
|
||||||
<option id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.STACK_SIZE.853894337" name="Set C system stack size (--stack_size, -stack)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.STACK_SIZE" value="0" valueType="string"/>
|
<option id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.STACK_SIZE.853894337" name="Set C system stack size (--stack_size, -stack)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.STACK_SIZE" value="0" valueType="string"/>
|
||||||
<option id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.MAP_FILE.1571165236" name="Input and output sections listed into <file> (--map_file, -m)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.MAP_FILE" value=""${ProjName}.map"" valueType="string"/>
|
<option id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.MAP_FILE.1571165236" name="Input and output sections listed into <file> (--map_file, -m)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.MAP_FILE" value=""${ProjName}.map"" valueType="string"/>
|
||||||
<option id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.HEAP_SIZE.224741917" name="Heap size for C/C++ dynamic memory allocation (--heap_size, -heap)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.HEAP_SIZE" value="0" valueType="string"/>
|
<option id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.HEAP_SIZE.224741917" name="Heap size for C/C++ dynamic memory allocation (--heap_size, -heap)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.HEAP_SIZE" value="0" valueType="string"/>
|
||||||
|
@ -70,6 +69,10 @@
|
||||||
<option id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.LIBRARY.2143651972" name="Include library file or command file as input (--library, -l)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.LIBRARY" valueType="libs">
|
<option id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.LIBRARY.2143651972" name="Include library file or command file as input (--library, -l)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.LIBRARY" valueType="libs">
|
||||||
<listOptionValue builtIn="false" value=""rtsv7R4_A_le_eabi.lib""/>
|
<listOptionValue builtIn="false" value=""rtsv7R4_A_le_eabi.lib""/>
|
||||||
</option>
|
</option>
|
||||||
|
<option id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.XML_LINK_INFO.92463411" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.XML_LINK_INFO" useByScannerDiscovery="false" value="${ProjName}_linkInfo.xml" valueType="string"/>
|
||||||
|
<inputType id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exeLinker.inputType__CMD_SRCS.1389326562" name="Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exeLinker.inputType__CMD_SRCS"/>
|
||||||
|
<inputType id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exeLinker.inputType__CMD2_SRCS.663039353" name="Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exeLinker.inputType__CMD2_SRCS"/>
|
||||||
|
<inputType id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exeLinker.inputType__GEN_CMDS.806247554" name="Generated Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exeLinker.inputType__GEN_CMDS"/>
|
||||||
</tool>
|
</tool>
|
||||||
</toolChain>
|
</toolChain>
|
||||||
</folderInfo>
|
</folderInfo>
|
||||||
|
@ -94,6 +97,7 @@
|
||||||
<extension id="com.ti.ccstudio.errorparser.CoffErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
<extension id="com.ti.ccstudio.errorparser.CoffErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
<extension id="com.ti.ccstudio.errorparser.LinkErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
<extension id="com.ti.ccstudio.errorparser.LinkErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
<extension id="com.ti.ccstudio.errorparser.AsmErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
<extension id="com.ti.ccstudio.errorparser.AsmErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
</extensions>
|
</extensions>
|
||||||
</storageModule>
|
</storageModule>
|
||||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||||
|
@ -104,7 +108,7 @@
|
||||||
<listOptionValue builtIn="false" value="DEVICE_CONFIGURATION_ID=Cortex R.RM48L950"/>
|
<listOptionValue builtIn="false" value="DEVICE_CONFIGURATION_ID=Cortex R.RM48L950"/>
|
||||||
<listOptionValue builtIn="false" value="DEVICE_ENDIANNESS=little"/>
|
<listOptionValue builtIn="false" value="DEVICE_ENDIANNESS=little"/>
|
||||||
<listOptionValue builtIn="false" value="OUTPUT_FORMAT=ELF"/>
|
<listOptionValue builtIn="false" value="OUTPUT_FORMAT=ELF"/>
|
||||||
<listOptionValue builtIn="false" value="CCS_MBS_VERSION=5.1.0.01"/>
|
<listOptionValue builtIn="false" value="CCS_MBS_VERSION=6.1.3"/>
|
||||||
<listOptionValue builtIn="false" value="LINKER_COMMAND_FILE=sys_link.cmd"/>
|
<listOptionValue builtIn="false" value="LINKER_COMMAND_FILE=sys_link.cmd"/>
|
||||||
<listOptionValue builtIn="false" value="RUNTIME_SUPPORT_LIBRARY=rtsv7R4_T_le_v3D16_eabi.lib"/>
|
<listOptionValue builtIn="false" value="RUNTIME_SUPPORT_LIBRARY=rtsv7R4_T_le_v3D16_eabi.lib"/>
|
||||||
<listOptionValue builtIn="false" value="OUTPUT_TYPE=executable"/>
|
<listOptionValue builtIn="false" value="OUTPUT_TYPE=executable"/>
|
||||||
|
@ -140,7 +144,7 @@
|
||||||
<inputType id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.compiler.inputType__ASM2_SRCS.1217483725" name="Assembly Sources" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.compiler.inputType__ASM2_SRCS"/>
|
<inputType id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.compiler.inputType__ASM2_SRCS.1217483725" name="Assembly Sources" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.compiler.inputType__ASM2_SRCS"/>
|
||||||
</tool>
|
</tool>
|
||||||
<tool id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exe.linkerRelease.501647685" name="ARM Linker" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exe.linkerRelease">
|
<tool id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exe.linkerRelease.501647685" name="ARM Linker" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exe.linkerRelease">
|
||||||
<option id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.OUTPUT_FILE.1816223925" name="Specify output file name (--output_file, -o)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.OUTPUT_FILE" value=""${ProjName}.out"" valueType="string"/>
|
<option id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.OUTPUT_FILE.1816223925" name="Specify output file name (--output_file, -o)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.OUTPUT_FILE" useByScannerDiscovery="false" value="${ProjName}.out" valueType="string"/>
|
||||||
<option id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.STACK_SIZE.467585369" name="Set C system stack size (--stack_size, -stack)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.STACK_SIZE" value="0" valueType="string"/>
|
<option id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.STACK_SIZE.467585369" name="Set C system stack size (--stack_size, -stack)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.STACK_SIZE" value="0" valueType="string"/>
|
||||||
<option id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.MAP_FILE.1733225483" name="Input and output sections listed into <file> (--map_file, -m)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.MAP_FILE" value=""${ProjName}.map"" valueType="string"/>
|
<option id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.MAP_FILE.1733225483" name="Input and output sections listed into <file> (--map_file, -m)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.MAP_FILE" value=""${ProjName}.map"" valueType="string"/>
|
||||||
<option id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.HEAP_SIZE.240907091" name="Heap size for C/C++ dynamic memory allocation (--heap_size, -heap)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.HEAP_SIZE" value="0" valueType="string"/>
|
<option id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.HEAP_SIZE.240907091" name="Heap size for C/C++ dynamic memory allocation (--heap_size, -heap)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.HEAP_SIZE" value="0" valueType="string"/>
|
||||||
|
@ -152,6 +156,10 @@
|
||||||
<option id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.LIBRARY.208988316" name="Include library file or command file as input (--library, -l)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.LIBRARY" valueType="libs">
|
<option id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.LIBRARY.208988316" name="Include library file or command file as input (--library, -l)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.LIBRARY" valueType="libs">
|
||||||
<listOptionValue builtIn="false" value=""rtsv7R4_T_le_v3D16_eabi.lib""/>
|
<listOptionValue builtIn="false" value=""rtsv7R4_T_le_v3D16_eabi.lib""/>
|
||||||
</option>
|
</option>
|
||||||
|
<option id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.XML_LINK_INFO.1229765869" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.XML_LINK_INFO" useByScannerDiscovery="false" value="${ProjName}_linkInfo.xml" valueType="string"/>
|
||||||
|
<inputType id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exeLinker.inputType__CMD_SRCS.112640407" name="Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exeLinker.inputType__CMD_SRCS"/>
|
||||||
|
<inputType id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exeLinker.inputType__CMD2_SRCS.245615829" name="Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exeLinker.inputType__CMD2_SRCS"/>
|
||||||
|
<inputType id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exeLinker.inputType__GEN_CMDS.1550865307" name="Generated Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exeLinker.inputType__GEN_CMDS"/>
|
||||||
</tool>
|
</tool>
|
||||||
</toolChain>
|
</toolChain>
|
||||||
</folderInfo>
|
</folderInfo>
|
||||||
|
@ -176,6 +184,7 @@
|
||||||
<extension id="com.ti.ccstudio.errorparser.CoffErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
<extension id="com.ti.ccstudio.errorparser.CoffErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
<extension id="com.ti.ccstudio.errorparser.LinkErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
<extension id="com.ti.ccstudio.errorparser.LinkErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
<extension id="com.ti.ccstudio.errorparser.AsmErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
<extension id="com.ti.ccstudio.errorparser.AsmErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
</extensions>
|
</extensions>
|
||||||
</storageModule>
|
</storageModule>
|
||||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||||
|
@ -186,7 +195,7 @@
|
||||||
<listOptionValue builtIn="false" value="DEVICE_CONFIGURATION_ID=Cortex R.TMS570LS3137"/>
|
<listOptionValue builtIn="false" value="DEVICE_CONFIGURATION_ID=Cortex R.TMS570LS3137"/>
|
||||||
<listOptionValue builtIn="false" value="DEVICE_ENDIANNESS=be32"/>
|
<listOptionValue builtIn="false" value="DEVICE_ENDIANNESS=be32"/>
|
||||||
<listOptionValue builtIn="false" value="OUTPUT_FORMAT=ELF"/>
|
<listOptionValue builtIn="false" value="OUTPUT_FORMAT=ELF"/>
|
||||||
<listOptionValue builtIn="false" value="CCS_MBS_VERSION=5.1.0.01"/>
|
<listOptionValue builtIn="false" value="CCS_MBS_VERSION=6.1.3"/>
|
||||||
<listOptionValue builtIn="false" value="LINKER_COMMAND_FILE=sys_link.cmd"/>
|
<listOptionValue builtIn="false" value="LINKER_COMMAND_FILE=sys_link.cmd"/>
|
||||||
<listOptionValue builtIn="false" value="RUNTIME_SUPPORT_LIBRARY=rtsv7R4_A_be_v3D16_eabi.lib"/>
|
<listOptionValue builtIn="false" value="RUNTIME_SUPPORT_LIBRARY=rtsv7R4_A_be_v3D16_eabi.lib"/>
|
||||||
<listOptionValue builtIn="false" value="OUTPUT_TYPE=executable"/>
|
<listOptionValue builtIn="false" value="OUTPUT_TYPE=executable"/>
|
||||||
|
@ -222,7 +231,7 @@
|
||||||
</tool>
|
</tool>
|
||||||
<tool id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exe.linkerRelease.1950748541" name="ARM Linker" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exe.linkerRelease">
|
<tool id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exe.linkerRelease.1950748541" name="ARM Linker" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exe.linkerRelease">
|
||||||
<option id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.ARM_BIG_ENDIAN_MODES.555757524" name="ARM big endian modes" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.ARM_BIG_ENDIAN_MODES" value="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.ARM_BIG_ENDIAN_MODES.BE32" valueType="enumerated"/>
|
<option id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.ARM_BIG_ENDIAN_MODES.555757524" name="ARM big endian modes" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.ARM_BIG_ENDIAN_MODES" value="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.ARM_BIG_ENDIAN_MODES.BE32" valueType="enumerated"/>
|
||||||
<option id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.OUTPUT_FILE.1273595535" name="Specify output file name (--output_file, -o)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.OUTPUT_FILE" value=""${ProjName}.out"" valueType="string"/>
|
<option id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.OUTPUT_FILE.1273595535" name="Specify output file name (--output_file, -o)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.OUTPUT_FILE" useByScannerDiscovery="false" value="${ProjName}.out" valueType="string"/>
|
||||||
<option id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.STACK_SIZE.923740600" name="Set C system stack size (--stack_size, -stack)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.STACK_SIZE" value="0" valueType="string"/>
|
<option id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.STACK_SIZE.923740600" name="Set C system stack size (--stack_size, -stack)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.STACK_SIZE" value="0" valueType="string"/>
|
||||||
<option id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.MAP_FILE.1947500930" name="Input and output sections listed into <file> (--map_file, -m)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.MAP_FILE" value=""${ProjName}.map"" valueType="string"/>
|
<option id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.MAP_FILE.1947500930" name="Input and output sections listed into <file> (--map_file, -m)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.MAP_FILE" value=""${ProjName}.map"" valueType="string"/>
|
||||||
<option id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.HEAP_SIZE.1985952317" name="Heap size for C/C++ dynamic memory allocation (--heap_size, -heap)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.HEAP_SIZE" value="0" valueType="string"/>
|
<option id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.HEAP_SIZE.1985952317" name="Heap size for C/C++ dynamic memory allocation (--heap_size, -heap)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.HEAP_SIZE" value="0" valueType="string"/>
|
||||||
|
@ -234,12 +243,13 @@
|
||||||
<option id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.LIBRARY.842576254" name="Include library file or command file as input (--library, -l)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.LIBRARY" valueType="libs">
|
<option id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.LIBRARY.842576254" name="Include library file or command file as input (--library, -l)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.LIBRARY" valueType="libs">
|
||||||
<listOptionValue builtIn="false" value=""rtsv7R4_A_be_v3D16_eabi.lib""/>
|
<listOptionValue builtIn="false" value=""rtsv7R4_A_be_v3D16_eabi.lib""/>
|
||||||
</option>
|
</option>
|
||||||
|
<option id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.XML_LINK_INFO.1144674016" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.XML_LINK_INFO" useByScannerDiscovery="false" value="${ProjName}_linkInfo.xml" valueType="string"/>
|
||||||
|
<inputType id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exeLinker.inputType__CMD_SRCS.437118762" name="Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exeLinker.inputType__CMD_SRCS"/>
|
||||||
|
<inputType id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exeLinker.inputType__CMD2_SRCS.193914583" name="Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exeLinker.inputType__CMD2_SRCS"/>
|
||||||
|
<inputType id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exeLinker.inputType__GEN_CMDS.2107965915" name="Generated Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exeLinker.inputType__GEN_CMDS"/>
|
||||||
</tool>
|
</tool>
|
||||||
</toolChain>
|
</toolChain>
|
||||||
</folderInfo>
|
</folderInfo>
|
||||||
<fileInfo id="com.ti.ccstudio.buildDefinitions.TMS470.Release.553048191.1928533182.2035527208.1562809246.sys_link.cmd" name="sys_link.cmd" rcbsApplicability="disable" resourcePath="sys_link.cmd" toolsToInvoke="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exe.linkerRelease.1950748541.894170726">
|
|
||||||
<tool id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exe.linkerRelease.1950748541.894170726" name="ARM Linker" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exe.linkerRelease.1950748541"/>
|
|
||||||
</fileInfo>
|
|
||||||
<fileInfo id="com.ti.ccstudio.buildDefinitions.TMS470.Release.553048191.1928533182.2035527208.1562809246.startup/sys_startup.c" name="sys_startup.c" rcbsApplicability="disable" resourcePath="startup/sys_startup.c" toolsToInvoke="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exe.compilerRelease.1984463577.1507509410">
|
<fileInfo id="com.ti.ccstudio.buildDefinitions.TMS470.Release.553048191.1928533182.2035527208.1562809246.startup/sys_startup.c" name="sys_startup.c" rcbsApplicability="disable" resourcePath="startup/sys_startup.c" toolsToInvoke="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exe.compilerRelease.1984463577.1507509410">
|
||||||
<tool id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exe.compilerRelease.1984463577.1507509410" name="ARM Compiler" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exe.compilerRelease.1984463577">
|
<tool id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exe.compilerRelease.1984463577.1507509410" name="ARM Compiler" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exe.compilerRelease.1984463577">
|
||||||
<option id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.compilerID.OPT_LEVEL.release.830908549" name="Optimization level (--opt_level, -O)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.compilerID.OPT_LEVEL.release" value="com.ti.ccstudio.buildDefinitions.TMS470_4.9.compilerID.OPT_LEVEL.2" valueType="enumerated"/>
|
<option id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.compilerID.OPT_LEVEL.release.830908549" name="Optimization level (--opt_level, -O)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.compilerID.OPT_LEVEL.release" value="com.ti.ccstudio.buildDefinitions.TMS470_4.9.compilerID.OPT_LEVEL.2" valueType="enumerated"/>
|
||||||
|
@ -264,6 +274,7 @@
|
||||||
<extension id="com.ti.ccstudio.errorparser.CoffErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
<extension id="com.ti.ccstudio.errorparser.CoffErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
<extension id="com.ti.ccstudio.errorparser.LinkErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
<extension id="com.ti.ccstudio.errorparser.LinkErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
<extension id="com.ti.ccstudio.errorparser.AsmErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
<extension id="com.ti.ccstudio.errorparser.AsmErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
</extensions>
|
</extensions>
|
||||||
</storageModule>
|
</storageModule>
|
||||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||||
|
@ -274,7 +285,7 @@
|
||||||
<listOptionValue builtIn="false" value="DEVICE_CONFIGURATION_ID=Cortex R.TMS570LS3137"/>
|
<listOptionValue builtIn="false" value="DEVICE_CONFIGURATION_ID=Cortex R.TMS570LS3137"/>
|
||||||
<listOptionValue builtIn="false" value="DEVICE_ENDIANNESS=be32"/>
|
<listOptionValue builtIn="false" value="DEVICE_ENDIANNESS=be32"/>
|
||||||
<listOptionValue builtIn="false" value="OUTPUT_FORMAT=ELF"/>
|
<listOptionValue builtIn="false" value="OUTPUT_FORMAT=ELF"/>
|
||||||
<listOptionValue builtIn="false" value="CCS_MBS_VERSION=5.1.0.01"/>
|
<listOptionValue builtIn="false" value="CCS_MBS_VERSION=6.1.3"/>
|
||||||
<listOptionValue builtIn="false" value="LINKER_COMMAND_FILE=sys_link.cmd"/>
|
<listOptionValue builtIn="false" value="LINKER_COMMAND_FILE=sys_link.cmd"/>
|
||||||
<listOptionValue builtIn="false" value="RUNTIME_SUPPORT_LIBRARY=rtsv7R4_A_be_eabi.lib"/>
|
<listOptionValue builtIn="false" value="RUNTIME_SUPPORT_LIBRARY=rtsv7R4_A_be_eabi.lib"/>
|
||||||
<listOptionValue builtIn="false" value="OUTPUT_TYPE=executable"/>
|
<listOptionValue builtIn="false" value="OUTPUT_TYPE=executable"/>
|
||||||
|
@ -310,7 +321,7 @@
|
||||||
</tool>
|
</tool>
|
||||||
<tool id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exe.linkerRelease.84849131" name="ARM Linker" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exe.linkerRelease">
|
<tool id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exe.linkerRelease.84849131" name="ARM Linker" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exe.linkerRelease">
|
||||||
<option id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.ARM_BIG_ENDIAN_MODES.798175542" name="ARM big endian modes" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.ARM_BIG_ENDIAN_MODES" value="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.ARM_BIG_ENDIAN_MODES.BE32" valueType="enumerated"/>
|
<option id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.ARM_BIG_ENDIAN_MODES.798175542" name="ARM big endian modes" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.ARM_BIG_ENDIAN_MODES" value="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.ARM_BIG_ENDIAN_MODES.BE32" valueType="enumerated"/>
|
||||||
<option id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.OUTPUT_FILE.543721384" name="Specify output file name (--output_file, -o)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.OUTPUT_FILE" value=""${ProjName}.out"" valueType="string"/>
|
<option id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.OUTPUT_FILE.543721384" name="Specify output file name (--output_file, -o)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.OUTPUT_FILE" useByScannerDiscovery="false" value="${ProjName}.out" valueType="string"/>
|
||||||
<option id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.STACK_SIZE.1539464576" name="Set C system stack size (--stack_size, -stack)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.STACK_SIZE" value="0" valueType="string"/>
|
<option id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.STACK_SIZE.1539464576" name="Set C system stack size (--stack_size, -stack)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.STACK_SIZE" value="0" valueType="string"/>
|
||||||
<option id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.MAP_FILE.1998840179" name="Input and output sections listed into <file> (--map_file, -m)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.MAP_FILE" value=""${ProjName}.map"" valueType="string"/>
|
<option id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.MAP_FILE.1998840179" name="Input and output sections listed into <file> (--map_file, -m)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.MAP_FILE" value=""${ProjName}.map"" valueType="string"/>
|
||||||
<option id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.HEAP_SIZE.1003024716" name="Heap size for C/C++ dynamic memory allocation (--heap_size, -heap)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.HEAP_SIZE" value="0" valueType="string"/>
|
<option id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.HEAP_SIZE.1003024716" name="Heap size for C/C++ dynamic memory allocation (--heap_size, -heap)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.HEAP_SIZE" value="0" valueType="string"/>
|
||||||
|
@ -322,20 +333,13 @@
|
||||||
<option id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.LIBRARY.114880783" name="Include library file or command file as input (--library, -l)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.LIBRARY" valueType="libs">
|
<option id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.LIBRARY.114880783" name="Include library file or command file as input (--library, -l)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.LIBRARY" valueType="libs">
|
||||||
<listOptionValue builtIn="false" value=""rtsv7R4_A_be_eabi.lib""/>
|
<listOptionValue builtIn="false" value=""rtsv7R4_A_be_eabi.lib""/>
|
||||||
</option>
|
</option>
|
||||||
|
<option id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.XML_LINK_INFO.96982868" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.linkerID.XML_LINK_INFO" useByScannerDiscovery="false" value="${ProjName}_linkInfo.xml" valueType="string"/>
|
||||||
|
<inputType id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exeLinker.inputType__CMD_SRCS.1391090270" name="Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exeLinker.inputType__CMD_SRCS"/>
|
||||||
|
<inputType id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exeLinker.inputType__CMD2_SRCS.749546672" name="Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exeLinker.inputType__CMD2_SRCS"/>
|
||||||
|
<inputType id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exeLinker.inputType__GEN_CMDS.1259946211" name="Generated Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exeLinker.inputType__GEN_CMDS"/>
|
||||||
</tool>
|
</tool>
|
||||||
</toolChain>
|
</toolChain>
|
||||||
</folderInfo>
|
</folderInfo>
|
||||||
<fileInfo id="com.ti.ccstudio.buildDefinitions.TMS470.Release.553048191.1928533182.2035527208.1562809246.662133471.845541724" name="comtest.c" rcbsApplicability="disable" resourcePath="Common-Demo-Source/comtest.c" toolsToInvoke="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exe.compilerRelease.1979429141.1142674897">
|
|
||||||
<tool id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exe.compilerRelease.1979429141.1142674897" name="ARM Compiler" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exe.compilerRelease.1979429141">
|
|
||||||
<inputType id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.compiler.inputType__C_SRCS.1465560373" name="C Sources" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.compiler.inputType__C_SRCS"/>
|
|
||||||
<inputType id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.compiler.inputType__CPP_SRCS.84439911" name="C++ Sources" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.compiler.inputType__CPP_SRCS"/>
|
|
||||||
<inputType id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.compiler.inputType__ASM_SRCS.80582186" name="Assembly Sources" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.compiler.inputType__ASM_SRCS"/>
|
|
||||||
<inputType id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.compiler.inputType__ASM2_SRCS.1077674308" name="Assembly Sources" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.compiler.inputType__ASM2_SRCS"/>
|
|
||||||
</tool>
|
|
||||||
</fileInfo>
|
|
||||||
<fileInfo id="com.ti.ccstudio.buildDefinitions.TMS470.Release.553048191.1928533182.2035527208.1562809246.662133471.sys_link.cmd" name="sys_link.cmd" rcbsApplicability="disable" resourcePath="sys_link.cmd" toolsToInvoke="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exe.linkerRelease.84849131.2011026297">
|
|
||||||
<tool id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exe.linkerRelease.84849131.2011026297" name="ARM Linker" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exe.linkerRelease.84849131"/>
|
|
||||||
</fileInfo>
|
|
||||||
<fileInfo id="com.ti.ccstudio.buildDefinitions.TMS470.Release.553048191.1928533182.2035527208.1562809246.662133471.startup/sys_startup.c" name="sys_startup.c" rcbsApplicability="disable" resourcePath="startup/sys_startup.c" toolsToInvoke="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exe.compilerRelease.1979429141.1888760656">
|
<fileInfo id="com.ti.ccstudio.buildDefinitions.TMS470.Release.553048191.1928533182.2035527208.1562809246.662133471.startup/sys_startup.c" name="sys_startup.c" rcbsApplicability="disable" resourcePath="startup/sys_startup.c" toolsToInvoke="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exe.compilerRelease.1979429141.1888760656">
|
||||||
<tool id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exe.compilerRelease.1979429141.1888760656" name="ARM Compiler" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exe.compilerRelease.1979429141">
|
<tool id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exe.compilerRelease.1979429141.1888760656" name="ARM Compiler" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exe.compilerRelease.1979429141">
|
||||||
<option id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.compilerID.OPT_LEVEL.release.1640008721" name="Optimization level (--opt_level, -O)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.compilerID.OPT_LEVEL.release" value="com.ti.ccstudio.buildDefinitions.TMS470_4.9.compilerID.OPT_LEVEL.2" valueType="enumerated"/>
|
<option id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.compilerID.OPT_LEVEL.release.1640008721" name="Optimization level (--opt_level, -O)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.compilerID.OPT_LEVEL.release" value="com.ti.ccstudio.buildDefinitions.TMS470_4.9.compilerID.OPT_LEVEL.2" valueType="enumerated"/>
|
||||||
|
@ -354,6 +358,14 @@
|
||||||
<inputType id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.compiler.inputType__ASM2_SRCS.807386460" name="Assembly Sources" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.compiler.inputType__ASM2_SRCS"/>
|
<inputType id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.compiler.inputType__ASM2_SRCS.807386460" name="Assembly Sources" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.compiler.inputType__ASM2_SRCS"/>
|
||||||
</tool>
|
</tool>
|
||||||
</fileInfo>
|
</fileInfo>
|
||||||
|
<fileInfo id="com.ti.ccstudio.buildDefinitions.TMS470.Release.553048191.1928533182.2035527208.1562809246.662133471.845541724" name="comtest.c" rcbsApplicability="disable" resourcePath="Common-Demo-Source/comtest.c" toolsToInvoke="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exe.compilerRelease.1979429141.1142674897">
|
||||||
|
<tool id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exe.compilerRelease.1979429141.1142674897" name="ARM Compiler" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.exe.compilerRelease.1979429141">
|
||||||
|
<inputType id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.compiler.inputType__C_SRCS.1465560373" name="C Sources" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.compiler.inputType__C_SRCS"/>
|
||||||
|
<inputType id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.compiler.inputType__CPP_SRCS.84439911" name="C++ Sources" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.compiler.inputType__CPP_SRCS"/>
|
||||||
|
<inputType id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.compiler.inputType__ASM_SRCS.80582186" name="Assembly Sources" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.compiler.inputType__ASM_SRCS"/>
|
||||||
|
<inputType id="com.ti.ccstudio.buildDefinitions.TMS470_4.9.compiler.inputType__ASM2_SRCS.1077674308" name="Assembly Sources" superClass="com.ti.ccstudio.buildDefinitions.TMS470_4.9.compiler.inputType__ASM2_SRCS"/>
|
||||||
|
</tool>
|
||||||
|
</fileInfo>
|
||||||
<sourceEntries>
|
<sourceEntries>
|
||||||
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
|
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
|
||||||
</sourceEntries>
|
</sourceEntries>
|
||||||
|
@ -376,4 +388,5 @@
|
||||||
</storageModule>
|
</storageModule>
|
||||||
<storageModule moduleId="refreshScope"/>
|
<storageModule moduleId="refreshScope"/>
|
||||||
<storageModule moduleId="scannerConfiguration"/>
|
<storageModule moduleId="scannerConfiguration"/>
|
||||||
|
<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
|
||||||
</cproject>
|
</cproject>
|
||||||
|
|
Loading…
Reference in a new issue