]> git.sur5r.net Git - freertos/blobdiff - FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/main.c
Update version number in readiness for V10.3.0 release. Sync SVN with reviewed releas...
[freertos] / FreeRTOS-Plus / Demo / FreeRTOS_IoT_Libraries / mqtt / main.c
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/main.c b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/main.c
deleted file mode 100644 (file)
index f2f8eb5..0000000
+++ /dev/null
@@ -1,364 +0,0 @@
-/*\r
- * FreeRTOS Kernel V10.2.1\r
- * Copyright (C) 2017 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
- *\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
- * The above copyright notice and this permission notice shall be included in all\r
- * copies or substantial portions of the Software.\r
- *\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://aws.amazon.com/freertos\r
- *\r
- * 1 tab == 4 spaces!\r
- */\r
-\r
- /***\r
-  * See https://www.FreeRTOS.org/mqtt/index.html for configuration and usage instructions.\r
-  ***/\r
-\r
-/* Standard includes. */\r
-#include <stdio.h>\r
-#include <time.h>\r
-\r
-/* Visual studio intrinsics used so the __debugbreak() function is available\r
-should an assert get hit. */\r
-#include <intrin.h>\r
-\r
-/* FreeRTOS includes. */\r
-#include <FreeRTOS.h>\r
-#include "task.h"\r
-\r
-/* TCP/IP stack includes. */\r
-#include "FreeRTOS_IP.h"\r
-#include "FreeRTOS_Sockets.h"\r
-\r
-/* Demo app includes. */\r
-#include "demo_logging.h"\r
-\r
-/*\r
- * Prototypes for the demos that can be started from this project.  Note the\r
- * MQTT demo is not actually started until the network is already, which is\r
- * indicated by vApplicationIPNetworkEventHook() executing - hence\r
- * prvStartSimpleMQTTDemo() is called from inside vApplicationIPNetworkEventHook().\r
- */\r
-extern void vStartSimpleMQTTDemo( void );\r
-\r
-/*\r
- * Just seeds the simple pseudo random number generator.\r
- *\r
- * !!! NOTE !!!\r
- * This is not a secure method of generating random numbers and production\r
- * devices should use a true random number generator (TRNG).\r
- */\r
-static void prvSRand( UBaseType_t ulSeed );\r
-\r
-/*\r
- * Miscellaneous initialisation including preparing the logging and seeding the\r
- * random number generator.\r
- */\r
-static void prvMiscInitialisation( void );\r
-\r
-/* The default IP and MAC address used by the demo.  The address configuration\r
-defined here will be used if ipconfigUSE_DHCP is 0, or if ipconfigUSE_DHCP is\r
-1 but a DHCP server could not be contacted.  See the online documentation for\r
-more information. */\r
-static const uint8_t ucIPAddress[ 4 ] = { configIP_ADDR0, configIP_ADDR1, configIP_ADDR2, configIP_ADDR3 };\r
-static const uint8_t ucNetMask[ 4 ] = { configNET_MASK0, configNET_MASK1, configNET_MASK2, configNET_MASK3 };\r
-static const uint8_t ucGatewayAddress[ 4 ] = { configGATEWAY_ADDR0, configGATEWAY_ADDR1, configGATEWAY_ADDR2, configGATEWAY_ADDR3 };\r
-static const uint8_t ucDNSServerAddress[ 4 ] = { configDNS_SERVER_ADDR0, configDNS_SERVER_ADDR1, configDNS_SERVER_ADDR2, configDNS_SERVER_ADDR3 };\r
-\r
-/* Set the following constant to pdTRUE to log using the method indicated by the\r
-name of the constant, or pdFALSE to not log using the method indicated by the\r
-name of the constant.  Options include to standard out (xLogToStdout), to a disk\r
-file (xLogToFile), and to a UDP port (xLogToUDP).  If xLogToUDP is set to pdTRUE\r
-then UDP messages are sent to the IP address configured as the echo server\r
-address (see the configECHO_SERVER_ADDR0 definitions in FreeRTOSConfig.h) and\r
-the port number set by configPRINT_PORT in FreeRTOSConfig.h. */\r
-const BaseType_t xLogToStdout = pdTRUE, xLogToFile = pdFALSE, xLogToUDP = pdFALSE;\r
-\r
-/* Default MAC address configuration.  The demo creates a virtual network\r
-connection that uses this MAC address by accessing the raw Ethernet data\r
-to and from a real network connection on the host PC.  See the\r
-configNETWORK_INTERFACE_TO_USE definition for information on how to configure\r
-the real network connection to use. */\r
-const uint8_t ucMACAddress[ 6 ] = { configMAC_ADDR0, configMAC_ADDR1, configMAC_ADDR2, configMAC_ADDR3, configMAC_ADDR4, configMAC_ADDR5 };\r
-\r
-/* Use by the pseudo random number generator. */\r
-static UBaseType_t ulNextRand;\r
-/*-----------------------------------------------------------*/\r
-\r
-int main( void )\r
-{\r
-       /***\r
-        * See https://www.FreeRTOS.org/mqtt/index.html for configuration and usage instructions.\r
-        ***/\r
-\r
-       /* Miscellaneous initialisation including preparing the logging and seeding\r
-       the random number generator. */\r
-       prvMiscInitialisation();\r
-\r
-       /* Initialise the network interface.\r
-\r
-       ***NOTE*** Tasks that use the network are created in the network event hook\r
-       when the network is connected and ready for use (see the implementation of\r
-       vApplicationIPNetworkEventHook() below).  The address values passed in here\r
-       are used if ipconfigUSE_DHCP is set to 0, or if ipconfigUSE_DHCP is set to 1\r
-       but a DHCP server cannot be     contacted. */\r
-       FreeRTOS_IPInit( ucIPAddress, ucNetMask, ucGatewayAddress, ucDNSServerAddress, ucMACAddress );\r
-\r
-       /* Start the RTOS scheduler. */\r
-       vTaskStartScheduler();\r
-\r
-       /* If all is well, the scheduler will now be running, and the following\r
-       line will never be reached.  If the following line does execute, then\r
-       there was insufficient FreeRTOS heap memory available for the idle and/or\r
-       timer tasks     to be created.  See the memory management section on the\r
-       FreeRTOS web site for more details (this is standard text that is not not\r
-       really applicable to the Win32 simulator port). */\r
-       for( ;; )\r
-       {\r
-               __debugbreak();\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/* Called by FreeRTOS+TCP when the network connects or disconnects.  Disconnect\r
-events are only received if implemented in the MAC driver. */\r
-void vApplicationIPNetworkEventHook( eIPCallbackEvent_t eNetworkEvent )\r
-{\r
-uint32_t ulIPAddress, ulNetMask, ulGatewayAddress, ulDNSServerAddress;\r
-char cBuffer[ 16 ];\r
-static BaseType_t xTasksAlreadyCreated = pdFALSE;\r
-\r
-       /* If the network has just come up...*/\r
-       if( eNetworkEvent == eNetworkUp )\r
-       {\r
-               /* Create the tasks that use the IP stack if they have not already been\r
-               created. */\r
-               if( xTasksAlreadyCreated == pdFALSE )\r
-               {\r
-                       /* Demos that use the nextwork are created after the nextwork is\r
-                       up. */\r
-                       vStartSimpleMQTTDemo();\r
-                       xTasksAlreadyCreated = pdTRUE;\r
-               }\r
-\r
-               /* Print out the network configuration, which may have come from a DHCP\r
-               server. */\r
-               FreeRTOS_GetAddressConfiguration( &ulIPAddress, &ulNetMask, &ulGatewayAddress, &ulDNSServerAddress );\r
-               FreeRTOS_inet_ntoa( ulIPAddress, cBuffer );\r
-               FreeRTOS_printf( ( "\r\n\r\nIP Address: %s\r\n", cBuffer ) );/*_RB_ Should use IoT libraries logging. */\r
-\r
-               FreeRTOS_inet_ntoa( ulNetMask, cBuffer );\r
-               FreeRTOS_printf( ( "Subnet Mask: %s\r\n", cBuffer ) );\r
-\r
-               FreeRTOS_inet_ntoa( ulGatewayAddress, cBuffer );\r
-               FreeRTOS_printf( ( "Gateway Address: %s\r\n", cBuffer ) );\r
-\r
-               FreeRTOS_inet_ntoa( ulDNSServerAddress, cBuffer );\r
-               FreeRTOS_printf( ( "DNS Server Address: %s\r\n\r\n\r\n", cBuffer ) );\r
-       }\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-void vAssertCalled( const char *pcFile, uint32_t ulLine )\r
-{\r
-       volatile uint32_t ulBlockVariable = 0UL;\r
-       volatile char *pcFileName = ( volatile char *  ) pcFile;\r
-       volatile uint32_t ulLineNumber = ulLine;\r
-\r
-       ( void ) pcFileName;\r
-       ( void ) ulLineNumber;\r
-\r
-       printf( "vAssertCalled( %s, %u\n", pcFile, ulLine );\r
-\r
-       /* Setting ulBlockVariable to a non-zero value in the debugger will allow\r
-       this function to be exited. */\r
-       taskDISABLE_INTERRUPTS();\r
-       {\r
-               while( ulBlockVariable == 0UL )\r
-               {\r
-                       __debugbreak();\r
-               }\r
-       }\r
-       taskENABLE_INTERRUPTS();\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-UBaseType_t uxRand( void )\r
-{\r
-const uint32_t ulMultiplier = 0x015a4e35UL, ulIncrement = 1UL;\r
-\r
-       /*\r
-        * Utility function to generate a pseudo random number.\r
-        *\r
-        * !!!NOTE!!!\r
-        * This is not a secure method of generating a random number.  Production\r
-        * devices should use a True Random Number Generator (TRNG).\r
-        */\r
-       ulNextRand = ( ulMultiplier * ulNextRand ) + ulIncrement;\r
-       return( ( int ) ( ulNextRand >> 16UL ) & 0x7fffUL );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvSRand( UBaseType_t ulSeed )\r
-{\r
-       /* Utility function to seed the pseudo random number generator. */\r
-       ulNextRand = ulSeed;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void prvMiscInitialisation( void )\r
-{\r
-time_t xTimeNow;\r
-uint32_t ulLoggingIPAddress;\r
-\r
-       ulLoggingIPAddress = FreeRTOS_inet_addr_quick( configECHO_SERVER_ADDR0, configECHO_SERVER_ADDR1, configECHO_SERVER_ADDR2, configECHO_SERVER_ADDR3 );\r
-       vLoggingInit( xLogToStdout, xLogToFile, xLogToUDP, ulLoggingIPAddress, configPRINT_PORT );\r
-\r
-       /*\r
-       * Seed random number generator.\r
-       *\r
-       * !!!NOTE!!!\r
-       * This is not a secure method of generating a random number.  Production\r
-       * devices should use a True Random Number Generator (TRNG).\r
-       */\r
-       time( &xTimeNow );\r
-       FreeRTOS_debug_printf( ( "Seed for randomiser: %lu\n", xTimeNow ) );\r
-       prvSRand( ( uint32_t ) xTimeNow );\r
-       FreeRTOS_debug_printf( ( "Random numbers: %08X %08X %08X %08X\n", ipconfigRAND32(), ipconfigRAND32(), ipconfigRAND32(), ipconfigRAND32() ) );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_LLMNR != 0 ) || ( ipconfigUSE_NBNS != 0 ) || ( ipconfigDHCP_REGISTER_HOSTNAME == 1 )\r
-\r
-       const char *pcApplicationHostnameHook( void )\r
-       {\r
-               /* Assign the name "FreeRTOS" to this network node.  This function will\r
-               be called during the DHCP: the machine will be registered with an IP\r
-               address plus this name. */\r
-               return mainHOST_NAME;\r
-       }\r
-\r
-#endif\r
-/*-----------------------------------------------------------*/\r
-\r
-#if( ipconfigUSE_LLMNR != 0 ) || ( ipconfigUSE_NBNS != 0 )\r
-\r
-       BaseType_t xApplicationDNSQueryHook( const char *pcName )\r
-       {\r
-       BaseType_t xReturn;\r
-\r
-               /* Determine if a name lookup is for this node.  Two names are given\r
-               to this node: that returned by pcApplicationHostnameHook() and that set\r
-               by mainDEVICE_NICK_NAME. */\r
-               if( _stricmp( pcName, pcApplicationHostnameHook() ) == 0 )\r
-               {\r
-                       xReturn = pdPASS;\r
-               }\r
-               else if( _stricmp( pcName, mainDEVICE_NICK_NAME ) == 0 )\r
-               {\r
-                       xReturn = pdPASS;\r
-               }\r
-               else\r
-               {\r
-                       xReturn = pdFAIL;\r
-               }\r
-\r
-               return xReturn;\r
-       }\r
-\r
-#endif\r
-/*-----------------------------------------------------------*/\r
-\r
-/*\r
- * Callback that provides the inputs necessary to generate a randomized TCP\r
- * Initial Sequence Number per RFC 6528.  THIS IS ONLY A DUMMY IMPLEMENTATION\r
- * THAT RETURNS A PSEUDO RANDOM NUMBER SO IS NOT INTENDED FOR USE IN PRODUCTION\r
- * SYSTEMS.\r
- */\r
-extern uint32_t ulApplicationGetNextSequenceNumber( uint32_t ulSourceAddress,\r
-                                                                                                       uint16_t usSourcePort,\r
-                                                                                                       uint32_t ulDestinationAddress,\r
-                                                                                                       uint16_t usDestinationPort )\r
-{\r
-       ( void ) ulSourceAddress;\r
-       ( void ) usSourcePort;\r
-       ( void ) ulDestinationAddress;\r
-       ( void ) usDestinationPort;\r
-\r
-       return uxRand();\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/* configUSE_STATIC_ALLOCATION is set to 1, so the application must provide an\r
-implementation of vApplicationGetIdleTaskMemory() to provide the memory that is\r
-used by the Idle task. */\r
-void vApplicationGetIdleTaskMemory( StaticTask_t** ppxIdleTaskTCBBuffer, StackType_t** ppxIdleTaskStackBuffer, uint32_t* pulIdleTaskStackSize )\r
-{\r
-       /* If the buffers to be provided to the Idle task are declared inside this\r
-       function then they must be declared static - otherwise they will be allocated on\r
-       the stack and so not exists after this function exits. */\r
-       static StaticTask_t xIdleTaskTCB;\r
-       static StackType_t uxIdleTaskStack[configMINIMAL_STACK_SIZE];\r
-\r
-       /* Pass out a pointer to the StaticTask_t structure in which the Idle task's\r
-       state will be stored. */\r
-       *ppxIdleTaskTCBBuffer = &xIdleTaskTCB;\r
-\r
-       /* Pass out the array that will be used as the Idle task's stack. */\r
-       *ppxIdleTaskStackBuffer = uxIdleTaskStack;\r
-\r
-       /* Pass out the size of the array pointed to by *ppxIdleTaskStackBuffer.\r
-       Note that, as the array is necessarily of type StackType_t,\r
-       configMINIMAL_STACK_SIZE is specified in words, not bytes. */\r
-       *pulIdleTaskStackSize = configMINIMAL_STACK_SIZE;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-/* configUSE_STATIC_ALLOCATION and configUSE_TIMERS are both set to 1, so the\r
-application must provide an implementation of vApplicationGetTimerTaskMemory()\r
-to provide the memory that is used by the Timer service task. */\r
-void vApplicationGetTimerTaskMemory( StaticTask_t** ppxTimerTaskTCBBuffer, StackType_t** ppxTimerTaskStackBuffer, uint32_t* pulTimerTaskStackSize )\r
-{\r
-       /* If the buffers to be provided to the Timer task are declared inside this\r
-       function then they must be declared static - otherwise they will be allocated on\r
-       the stack and so not exists after this function exits. */\r
-       static StaticTask_t xTimerTaskTCB;\r
-       static StackType_t uxTimerTaskStack[configTIMER_TASK_STACK_DEPTH];\r
-\r
-       /* Pass out a pointer to the StaticTask_t structure in which the Timer\r
-       task's state will be stored. */\r
-       *ppxTimerTaskTCBBuffer = &xTimerTaskTCB;\r
-\r
-       /* Pass out the array that will be used as the Timer task's stack. */\r
-       *ppxTimerTaskStackBuffer = uxTimerTaskStack;\r
-\r
-       /* Pass out the size of the array pointed to by *ppxTimerTaskStackBuffer.\r
-       Note that, as the array is necessarily of type StackType_t,\r
-       configMINIMAL_STACK_SIZE is specified in words, not bytes. */\r
-       *pulTimerTaskStackSize = configTIMER_TASK_STACK_DEPTH;\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r