/*\r
- * FreeRTOS+UDP V1.0.1 (C) 2013 Real Time Engineers ltd.\r
- * All rights reserved\r
+ * FreeRTOS+UDP V1.0.4\r
+ * Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\r
*\r
- * This file is part of the FreeRTOS+UDP distribution. The FreeRTOS+UDP license\r
- * terms are different to the FreeRTOS license terms.\r
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of\r
+ * this software and associated documentation files (the "Software"), to deal in\r
+ * the Software without restriction, including without limitation the rights to\r
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\r
+ * the Software, and to permit persons to whom the Software is furnished to do so,\r
+ * subject to the following conditions:\r
*\r
- * FreeRTOS+UDP uses a dual license model that allows the software to be used \r
- * under a standard GPL open source license, or a commercial license. The \r
- * standard GPL license (unlike the modified GPL license under which FreeRTOS \r
- * itself is distributed) requires that all software statically linked with \r
- * FreeRTOS+UDP is also distributed under the same GPL V2 license terms. \r
- * Details of both license options follow:\r
+ * The above copyright notice and this permission notice shall be included in all\r
+ * copies or substantial portions of the Software. If you wish to use our Amazon\r
+ * FreeRTOS name, please do so in a fair use way that does not cause confusion.\r
*\r
- * - Open source licensing -\r
- * FreeRTOS+UDP is a free download and may be used, modified, evaluated and\r
- * distributed without charge provided the user adheres to version two of the\r
- * GNU General Public License (GPL) and does not remove the copyright notice or\r
- * this text. The GPL V2 text is available on the gnu.org web site, and on the\r
- * following URL: http://www.FreeRTOS.org/gpl-2.0.txt.\r
- *\r
- * - Commercial licensing -\r
- * Businesses and individuals that for commercial or other reasons cannot comply\r
- * with the terms of the GPL V2 license must obtain a commercial license before \r
- * incorporating FreeRTOS+UDP into proprietary software for distribution in any \r
- * form. Commercial licenses can be purchased from http://shop.freertos.org/udp \r
- * and do not require any source files to be changed.\r
- *\r
- * FreeRTOS+UDP is distributed in the hope that it will be useful. You cannot\r
- * use FreeRTOS+UDP unless you agree that you use the software 'as is'.\r
- * FreeRTOS+UDP is provided WITHOUT ANY WARRANTY; without even the implied\r
- * warranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR\r
- * PURPOSE. Real Time Engineers Ltd. disclaims all conditions and terms, be they\r
- * implied, expressed, or statutory.\r
- *\r
- * 1 tab == 4 spaces!\r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r
+ * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r
+ * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
*\r
* http://www.FreeRTOS.org\r
- * http://www.FreeRTOS.org/udp\r
+ * http://aws.amazon.com/freertos\r
*\r
+ * 1 tab == 4 spaces!\r
*/\r
\r
/* Standard includes. */\r
\r
/* xWaitingPacketSemaphore is not created until the socket is bound, so can be\r
tested to see if bind() has been called. */\r
-#define socketSOCKET_IS_BOUND( pxSocket ) ( ( uint32_t ) pxSocket->xWaitingPacketSemaphore )\r
+#define socketSOCKET_IS_BOUND( pxSocket ) ( ( BaseType_t ) pxSocket->xWaitingPacketSemaphore )\r
\r
/* If FreeRTOS_sendto() is called on a socket that is not bound to a port\r
number then, depending on the FreeRTOSIPConfig.h settings, it might be that a\r
* Return the list itme from within pxList that has an item value of\r
* xWantedItemValue. If there is no such list item return NULL.\r
*/\r
-xListItem * pxListFindListItemWithValue( xList *pxList, portTickType xWantedItemValue );\r
+xListItem * pxListFindListItemWithValue( xList *pxList, TickType_t xWantedItemValue );\r
\r
/*-----------------------------------------------------------*/\r
\r
xSemaphoreHandle xWaitingPacketSemaphore;\r
xList xWaitingPacketsList;\r
xListItem xBoundSocketListItem; /* Used to reference the socket from a bound sockets list. */\r
- portTickType xReceiveBlockTime;\r
- portTickType xSendBlockTime;\r
+ TickType_t xReceiveBlockTime;\r
+ TickType_t xSendBlockTime;\r
uint8_t ucSocketOptions;\r
#if ipconfigSUPPORT_SELECT_FUNCTION == 1\r
xQueueHandle xSelectQueue;\r
\r
/*-----------------------------------------------------------*/\r
\r
-xSocket_t FreeRTOS_socket( portBASE_TYPE xDomain, portBASE_TYPE xType, portBASE_TYPE xProtocol )\r
+xSocket_t FreeRTOS_socket( BaseType_t xDomain, BaseType_t xType, BaseType_t xProtocol )\r
{\r
xFreeRTOS_Socket_t *pxSocket;\r
\r
vListInitialise( &( pxSocket->xWaitingPacketsList ) );\r
vListInitialiseItem( &( pxSocket->xBoundSocketListItem ) );\r
listSET_LIST_ITEM_OWNER( &( pxSocket->xBoundSocketListItem ), ( void * ) pxSocket );\r
- pxSocket->xSendBlockTime = ( portTickType ) 0;\r
+ pxSocket->xSendBlockTime = ( TickType_t ) 0;\r
pxSocket->xReceiveBlockTime = portMAX_DELAY;\r
pxSocket->ucSocketOptions = FREERTOS_SO_UDPCKSUM_OUT;\r
#if ipconfigSUPPORT_SELECT_FUNCTION == 1\r
\r
#if ipconfigSUPPORT_SELECT_FUNCTION == 1\r
\r
- xSocketSet_t FreeRTOS_CreateSocketSet( unsigned portBASE_TYPE uxEventQueueLength )\r
+ xSocketSet_t FreeRTOS_CreateSocketSet( UBaseType_t uxEventQueueLength )\r
{\r
xQueueHandle xSelectQueue;\r
\r
\r
#if ipconfigSUPPORT_SELECT_FUNCTION == 1\r
\r
- portBASE_TYPE FreeRTOS_FD_SET( xSocket_t xSocket, xSocketSet_t xSocketSet )\r
+ BaseType_t FreeRTOS_FD_SET( xSocket_t xSocket, xSocketSet_t xSocketSet )\r
{\r
xFreeRTOS_Socket_t *pxSocket = ( xFreeRTOS_Socket_t * ) xSocket;\r
- portBASE_TYPE xReturn = pdFALSE;\r
- unsigned portBASE_TYPE uxMessagesWaiting;\r
+ BaseType_t xReturn = pdFALSE;\r
+ UBaseType_t uxMessagesWaiting;\r
\r
configASSERT( xSocket );\r
\r
\r
#if ipconfigSUPPORT_SELECT_FUNCTION == 1\r
\r
- portBASE_TYPE FreeRTOS_FD_CLR( xSocket_t xSocket, xSocketSet_t xSocketSet ) \r
+ BaseType_t FreeRTOS_FD_CLR( xSocket_t xSocket, xSocketSet_t xSocketSet )\r
{\r
xFreeRTOS_Socket_t *pxSocket = ( xFreeRTOS_Socket_t * ) xSocket;\r
- portBASE_TYPE xReturn;\r
+ BaseType_t xReturn;\r
\r
/* Is the socket a member of the select group? */\r
if( pxSocket->xSelectQueue == ( xQueueHandle ) xSocketSet )\r
\r
#if ipconfigSUPPORT_SELECT_FUNCTION == 1\r
\r
- xSocket_t FreeRTOS_select( xSocketSet_t xSocketSet, portTickType xBlockTimeTicks )\r
+ xSocket_t FreeRTOS_select( xSocketSet_t xSocketSet, TickType_t xBlockTimeTicks )\r
{\r
xFreeRTOS_Socket_t *pxSocket;\r
\r
extern xQueueHandle xNetworkEventQueue;\r
uint8_t *pucBuffer;\r
xTimeOutType xTimeOut;\r
- portTickType xTicksToWait;\r
+ TickType_t xTicksToWait;\r
uint16_t usFragmentOffset;\r
xFreeRTOS_Socket_t *pxSocket;\r
\r
xIPStackEvent_t xStackTxEvent = { eStackTxEvent, NULL };\r
extern xQueueHandle xNetworkEventQueue;\r
xTimeOutType xTimeOut;\r
- portTickType xTicksToWait;\r
+ TickType_t xTicksToWait;\r
int32_t lReturn = 0;\r
xFreeRTOS_Socket_t *pxSocket;\r
uint8_t *pucBuffer;\r
#endif /* ipconfigCAN_FRAGMENT_OUTGOING_PACKETS */\r
/*-----------------------------------------------------------*/\r
\r
-portBASE_TYPE FreeRTOS_bind( xSocket_t xSocket, struct freertos_sockaddr * pxAddress, socklen_t xAddressLength )\r
+BaseType_t FreeRTOS_bind( xSocket_t xSocket, struct freertos_sockaddr * pxAddress, socklen_t xAddressLength )\r
{\r
-portBASE_TYPE xReturn = 0; /* In Berkeley sockets, 0 means pass for bind(). */\r
+BaseType_t xReturn = 0; /* In Berkeley sockets, 0 means pass for bind(). */\r
xFreeRTOS_Socket_t *pxSocket;\r
#if ipconfigALLOW_SOCKET_SEND_WITHOUT_BIND == 1\r
struct freertos_sockaddr xAddress;\r
vTaskSuspendAll();\r
{\r
/* Check to ensure the port is not already in use. */\r
- if( pxListFindListItemWithValue( &xBoundSocketsList, ( portTickType ) pxAddress->sin_port ) != NULL )\r
+ if( pxListFindListItemWithValue( &xBoundSocketsList, ( TickType_t ) pxAddress->sin_port ) != NULL )\r
{\r
xReturn = FREERTOS_EADDRINUSE;\r
}\r
} /* Tested */\r
/*-----------------------------------------------------------*/\r
\r
-portBASE_TYPE FreeRTOS_closesocket( xSocket_t xSocket )\r
+BaseType_t FreeRTOS_closesocket( xSocket_t xSocket )\r
{\r
xNetworkBufferDescriptor_t *pxNetworkBuffer;\r
xFreeRTOS_Socket_t *pxSocket;\r
}\r
/*-----------------------------------------------------------*/\r
\r
-portBASE_TYPE FreeRTOS_setsockopt( xSocket_t xSocket, int32_t lLevel, int32_t lOptionName, const void *pvOptionValue, size_t xOptionLength )\r
+BaseType_t FreeRTOS_setsockopt( xSocket_t xSocket, int32_t lLevel, int32_t lOptionName, const void *pvOptionValue, size_t xOptionLength )\r
{\r
/* The standard Berkeley function returns 0 for success. */\r
-portBASE_TYPE xReturn = 0;\r
-portBASE_TYPE lOptionValue;\r
+BaseType_t xReturn = 0;\r
+BaseType_t lOptionValue;\r
xFreeRTOS_Socket_t *pxSocket;\r
\r
pxSocket = ( xFreeRTOS_Socket_t * ) xSocket;\r
{\r
case FREERTOS_SO_RCVTIMEO :\r
/* Receive time out. */\r
- pxSocket->xReceiveBlockTime = *( ( portTickType * ) pvOptionValue );\r
+ pxSocket->xReceiveBlockTime = *( ( TickType_t * ) pvOptionValue );\r
break;\r
\r
case FREERTOS_SO_SNDTIMEO :\r
where ipconfigMAX_SEND_BLOCK_TIME_TICKS is defined in\r
FreeRTOSIPConfig.h (assuming an official configuration file is being\r
used. */\r
- pxSocket->xSendBlockTime = *( ( portTickType * ) pvOptionValue );\r
+ pxSocket->xSendBlockTime = *( ( TickType_t * ) pvOptionValue );\r
if( pxSocket->xSendBlockTime > ipconfigMAX_SEND_BLOCK_TIME_TICKS )\r
{\r
pxSocket->xSendBlockTime = ipconfigMAX_SEND_BLOCK_TIME_TICKS;\r
\r
case FREERTOS_SO_UDPCKSUM_OUT :\r
/* Turn calculating of the UDP checksum on/off for this socket. */\r
- lOptionValue = ( portBASE_TYPE ) pvOptionValue;\r
+ lOptionValue = ( BaseType_t ) pvOptionValue;\r
\r
if( lOptionValue == 0 )\r
{\r
} /* Tested */\r
/*-----------------------------------------------------------*/\r
\r
-portBASE_TYPE xProcessReceivedUDPPacket( xNetworkBufferDescriptor_t *pxNetworkBuffer, uint16_t usPort )\r
+BaseType_t xProcessReceivedUDPPacket( xNetworkBufferDescriptor_t *pxNetworkBuffer, uint16_t usPort )\r
{\r
xListItem *pxListItem;\r
-portBASE_TYPE xReturn = pdPASS;\r
+BaseType_t xReturn = pdPASS;\r
xFreeRTOS_Socket_t *pxSocket;\r
-portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;\r
+BaseType_t xHigherPriorityTaskWoken = pdFALSE;\r
\r
vTaskSuspendAll();\r
{\r
/* See if there is a list item associated with the port number on the\r
list of bound sockets. */\r
- pxListItem = pxListFindListItemWithValue( &xBoundSocketsList, ( portTickType ) usPort );\r
+ pxListItem = pxListFindListItemWithValue( &xBoundSocketsList, ( TickType_t ) usPort );\r
}\r
xTaskResumeAll();\r
\r
/* Is the socket a member of a select() group? */\r
if( pxSocket->xSelectQueue != NULL )\r
{\r
- /* Can the select group be notified that the socket is \r
+ /* Can the select group be notified that the socket is\r
ready to be read? */\r
if( xQueueSendFromISR( pxSocket->xSelectQueue, &pxSocket, &xHigherPriorityTaskWoken ) != pdPASS )\r
{\r
/* Could not notify the select group. */\r
xReturn = pdFAIL;\r
iptraceFAILED_TO_NOTIFY_SELECT_GROUP( pxSocket );\r
- } \r
+ }\r
}\r
}\r
- #endif \r
+ #endif\r
\r
if( xReturn == pdPASS )\r
{\r
taskENTER_CRITICAL();\r
{\r
- /* Add the network packet to the list of packets to be \r
+ /* Add the network packet to the list of packets to be\r
processed by the socket. */\r
vListInsertEnd( &( pxSocket->xWaitingPacketsList ), &( pxNetworkBuffer->xBufferListItem ) );\r
}\r
taskEXIT_CRITICAL();\r
\r
- /* The socket's counting semaphore records how many packets are \r
+ /* The socket's counting semaphore records how many packets are\r
waiting to be processed by the socket. */\r
xSemaphoreGiveFromISR( pxSocket->xWaitingPacketSemaphore, &xHigherPriorityTaskWoken );\r
}\r
create first so the early port numbers may still be in use. */\r
usNextPortToUse = socketAUTO_PORT_ALLOCATION_RESET_NUMBER;\r
}\r
+\r
+ usReturn = FreeRTOS_htons( usNextPortToUse );\r
}\r
taskEXIT_CRITICAL();\r
\r
- usReturn = FreeRTOS_htons( usNextPortToUse );\r
-\r
return usReturn;\r
} /* Tested */\r
/*-----------------------------------------------------------*/\r
\r
-xListItem * pxListFindListItemWithValue( xList *pxList, portTickType xWantedItemValue )\r
+xListItem * pxListFindListItemWithValue( xList *pxList, TickType_t xWantedItemValue )\r
{\r
xListItem *pxIterator, *pxReturn;\r
\r
\r
#if ipconfigINCLUDE_FULL_INET_ADDR == 1\r
\r
- uint32_t FreeRTOS_inet_addr( const uint8_t * pucIPAddress )\r
+ uint32_t FreeRTOS_inet_addr( const char *pcIPAddress )\r
{\r
const uint8_t ucDecimalBase = 10;\r
uint8_t ucOctet[ socketMAX_IP_ADDRESS_OCTETS ];\r
- const uint8_t *pucPointerOnEntering;\r
+ const char *pcPointerOnEntering;\r
uint32_t ulReturn = 0UL, ulOctetNumber, ulValue;\r
- portBASE_TYPE xResult = pdPASS;\r
+ BaseType_t xResult = pdPASS;\r
\r
for( ulOctetNumber = 0; ulOctetNumber < socketMAX_IP_ADDRESS_OCTETS; ulOctetNumber++ )\r
{\r
ulValue = 0;\r
- pucPointerOnEntering = pucIPAddress;\r
+ pcPointerOnEntering = pcIPAddress;\r
\r
- while( ( *pucIPAddress >= ( uint8_t ) '0' ) && ( *pucIPAddress <= ( uint8_t ) '9' ) )\r
+ while( ( *pcIPAddress >= ( uint8_t ) '0' ) && ( *pcIPAddress <= ( uint8_t ) '9' ) )\r
{\r
/* Move previous read characters into the next decimal\r
position. */\r
ulValue *= ucDecimalBase;\r
\r
/* Add the binary value of the ascii character. */\r
- ulValue += ( *pucIPAddress - ( uint8_t ) '0' );\r
+ ulValue += ( *pcIPAddress - ( uint8_t ) '0' );\r
\r
/* Move to next character in the string. */\r
- pucIPAddress++;\r
+ pcIPAddress++;\r
}\r
\r
/* Check characters were read. */\r
- if( pucIPAddress == pucPointerOnEntering )\r
+ if( pcIPAddress == pcPointerOnEntering )\r
{\r
xResult = pdFAIL;\r
}\r
/* Check the next character is as expected. */\r
if( ulOctetNumber < ( socketMAX_IP_ADDRESS_OCTETS - 1 ) )\r
{\r
- if( *pucIPAddress != ( uint8_t ) '.' )\r
+ if( *pcIPAddress != ( uint8_t ) '.' )\r
{\r
xResult = pdFAIL;\r
}\r
else\r
{\r
/* Move past the dot. */\r
- pucIPAddress++;\r
+ pcIPAddress++;\r
}\r
}\r
}\r
}\r
}\r
\r
- if( *pucIPAddress != ( uint8_t ) 0x00 )\r
+ if( *pcIPAddress != ( uint8_t ) 0x00 )\r
{\r
/* Expected the end of the string. */\r
xResult = pdFAIL;\r